如何设置的指令内插值? 我可以阅读下面的代码正确的值,但我一直没能进行设置。
JS:
app.directive('ngMyDirective', function () {
return function(scope, element, attrs) {
console.log(scope.$eval(attrs.ngMyDirective));
//set the interpolated attrs.ngMyDirective value somehow!!!
}
});
HTML:
<div ng-my-directive="myscopevalue"></div>
其中myscopevalue
是我的控制器的范围值。
如果你想设置的范围值,但不知道属性的名称(提前),你可以使用object[property]
语法:
scope[attrs.myNgDirective] = 'newValue';
如果属性字符串包含一个点(如myObject.myProperty
),这是不行的; 你可以用$eval
做一个任务:
// like calling "myscopevalue = 'newValue'"
scope.$eval(attrs.myNgDirective + " = 'newValue'");
[更新:你真的应该使用$parse
,而不是$eval
。 见马克的答案 。]
如果您使用的是分离的范围,你可以使用=
注释:
app.directive('ngMyDirective', function () {
return {
scope: {
theValue: '=ngMyDirective'
},
link: function(scope, element, attrs) {
// will automatically change parent scope value
// associated by the variable name given to `attrs.ngMyDirective`
scope.theValue = 'newValue';
}
}
});
你可以看到这样的例子此角/ jQuery的颜色选择器的jsfiddle例如 ,在分配给scope.color
指令内自动更新传递到对控制器的范围指令的变量。
每当指令不使用分离的范围,并指定使用属性的作用域属性,你想改变属性的值,我建议使用$解析 。 (我觉得语法比$ EVAL的更好。)
app.directive('ngMyDirective', function ($parse) {
return function(scope, element, attrs) {
var model = $parse(attrs.ngMyDirective);
console.log(model(scope));
model.assign(scope,'Anton');
console.log(model(scope));
}
});
小提琴
$parse
工作属性是否包含一个点。