use*_*814 16 javascript angularjs
我在ng-repeater中有一个指令应该设置一个范围属性.请看这里的小提琴:http://jsfiddle.net/paos/CSbRB/
问题是scope属性是作为属性值给出的,如下所示:
<button ng-update1="inputdata.title">click me</button>
Run Code Online (Sandbox Code Playgroud)
该指令应该将scope属性inputdata.title设置为某个字符串.这不起作用:
app.directive('ngUpdate1', function() {
return function(scope, element, attrs) {
element.bind('click', function() {
scope.$apply(function() {
scope[ attrs.ngUpdate1 ] = "Button 1";
});
});
};
});
Run Code Online (Sandbox Code Playgroud)
但是,直接分配工作:
scope["inputdata"]["title"] = "Button 1";
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何设置范围属性吗?指令中的符号表示法?
PS:小提琴使用转发器的原因是因为它使指令在子范围内.当它们位于子作用域中时,您无法写入作为基元的作用域属性.这就是为什么我需要一个带有"."的对象属性.在名字里.请参阅此处的详细解释:AngularJS中范围原型/原型继承的细微差别是什么?
谢谢
Mar*_*cok 35
$ parse将解决您的问题.
<button ng-update1="inputdata.title">
Run Code Online (Sandbox Code Playgroud)
app.directive('ngUpdate1', function($parse) {
return function(scope, element, attrs) {
var model = $parse(attrs.ngUpdate1);
console.log(model(scope)); // logs "test"
element.bind('click', function() {
model.assign(scope, "Button 1");
scope.$apply();
});
};
});
Run Code Online (Sandbox Code Playgroud)
每当指令不使用隔离范围并使用属性指定范围属性,并且您想要修改该值时,请使用$parse.
如果您不需要修改该值,则可以使用$eval:
console.log(scope.$eval(attrs.ngUpdate1));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21765 次 |
| 最近记录: |