如何在子作用域中从指令中设置Angular控制器对象的属性值。

18 浏览
0 Comments

如何在子作用域中从指令中设置Angular控制器对象的属性值。

我在ng-repeater内部有一个指令,应该设置一个作用域属性。\n请在这里查看fiddle:http://jsfiddle.net/paos/CSbRB/\n问题是作用域属性被设置为一个属性值,如下所示:\n


\n该指令应该将作用域属性inputdata.title设置为某个字符串。但这不起作用:\n

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

\n然而,直接赋值是有效的:\n

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

\n请告诉我如何通过指令使用点符号设置作用域属性的名称?\n附注:fiddle使用重复器的原因是它使指令处于子作用域中。当它们处于子作用域中时,无法写入原始类型的作用域属性。这就是为什么我需要一个带有\".\"的对象属性的原因。请参见这里的详细解释:什么是AngularJS中作用域原型/原型继承的细微差别?\n谢谢。

0
0 Comments

在这段内容中,提到了如何从指令中的子作用域设置Angular控制器对象属性的值。这个问题的出现原因是需要在指令中修改父作用域中的属性值。解决方法有多种,可以通过创建两个属性,一个用于目标对象,另一个用于该对象的属性;或者可以使用现有的格式,将当前的ng-update1属性的值分割成数组,然后将数组的结果用于对象和属性的表示法;还可以创建一个隔离作用域,在指令中传入对inputdata对象的引用,并从属性中获取属性名称。此外,还可以使用$parse代替两个属性或split()方法。通过使用隔离作用域,还可以直接绑定到对象属性。

0
0 Comments

问题的原因是当一个指令使用一个属性指定作用域属性,并且想要修改该值时,它不能直接修改,需要使用$parse或$eval来解析并修改该值。

解决方法是使用$parse或$eval来解析并修改作用域属性的值。如果想要修改该值,可以使用$parse,如果不需要修改,可以使用$eval。

以下是使用$parse的示例代码:

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

以下是使用$eval的示例代码:

console.log(scope.$eval(attrs.ngUpdate1));

如果想要使用ng-model作为HTML属性而不是自定义属性,并且指令是在链接函数中使用的,那么需要在一个新的问题中提出,并提供一个相关的示例。答案也取决于指令使用的作用域类型。可以参考这个链接:[ngmodel and component with isolated scope](http://stackoverflow.com/questions/11896732)。

最后,如果问题已经解决了,可以提供一个相关的示例来说明解决方法。

0