如何设置角度指令的插补值?(how to set an interpolated value in

2019-09-02 13:55发布

如何设置的指令内插值? 我可以阅读下面的代码正确的值,但我一直没能进行设置。

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是我的控制器的范围值。

Answer 1:

如果你想设置的范围值,但不知道属性的名称(提前),你可以使用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指令内自动更新传递对控制器的范围指令的变量。



Answer 2:

每当指令不使用分离的范围,并指定使用属性的作用域属性,你想改变属性的值,我建议使用$解析 。 (我觉得语法比$ 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工作属性是否包含一个点。



文章来源: how to set an interpolated value in angular directive?