javascript - 如何从子范围内的指令设置 Angular Controller 对象属性值

标签 javascript angularjs

我在 ng-repeater 中有一个指令应该设置一个范围属性。 请在此处查看 fiddle :http://jsfiddle.net/paos/CSbRB/

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

<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: fiddle 使用中继器的原因是它使指令位于子范围内。当它们在子作用域中时,您不能写入原始作用域属性。这就是为什么我需要一个带有“.”的对象属性。在名字里。请在此处查看详细说明:What are the nuances of scope prototypal / prototypical inheritance in AngularJS?

谢谢

最佳答案

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

Fiddle

每当指令不使用隔离作用域并且您使用属性指定作用域属性,并且您想要修改该值时,请使用 $parse

如果不需要修改值,可以使用$eval代替:

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

关于javascript - 如何从子范围内的指令设置 Angular Controller 对象属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15721298/

相关文章:

javascript - 防止 rxjs Subject 完成

javascript - 索引循环不变

Javascript self 编辑?

javascript - 更改 md-autocomplete 的占位符文本的 css

mysql - AngularJS + Ionic : Checking if new Entry in Database, 如果是:推送通知

javascript - 您可以使用 JavaScript 显示/隐藏 iPad Safari 键盘吗?

AngularJS ngResource 不发送自定义 header

javascript - AngularJS 忘记密码

django - 带有 gettext 的动态消息(AngularJS)

javascript - InDesign 启动脚本不从 XML 导入加载图像的问题