小编典典

如何在子作用域中通过指令设置角度控制器对象属性值

angularjs

我在ng-repeater内部有一条指令,应该设置一个scope属性。请在此处查看小提琴:http: //jsfiddle.net/paos/CSbRB/

问题是范围属性是作为属性值给出的,如下所示:

<button ng-update1="inputdata.title">click me</button>

该指令应该将范围属性inputdata.title设置为某些字符串。这不起作用:

app.directive('ngUpdate1', function() {
    return function(scope, element, attrs) {
        element.bind('click', function() {
            scope.$apply(function() {
                scope[ attrs.ngUpdate1 ] = "Button 1";
            });
        });
    };
});

但是,直接分配有效:

scope["inputdata"]["title"] = "Button 1";

您能告诉我如何使用来设置作用域属性吗?指令名称中的符号?

PS:提琴使用中继器的原因是因为它使指令位于子范围内。当它们在子作用域中时,您不能写入原始的作用域属性。这就是为什么我需要带有“。”的对象属性。在名字里。
谢谢


阅读 312

收藏
2020-07-04

共1个答案

小编典典

$ parse将解决您的问题。

<button ng-update1="inputdata.title">



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();
        });
    };
});

小提琴

只要指令不使用隔离范围,而您使用属性指定范围属性,并且想要修改值,请使用$parse

如果不需要修改值,则可以使用$eval

console.log(scope.$eval(attrs.ngUpdate1));
2020-07-04