AngularJS自定义属性不评估第一次指令运行

时间:2016-08-17 16:47:28

标签: javascript angularjs attributes initialization directive

HTML

<a custom-attr='{{ controller.object.value }}' data-ng-model='controller.object.value'>

Angular指令

.directive('customAttr', function () {
    return {
        require: 'ngModel',
        controller: 'ControllerName',
        controllerAs: 'cName',
        link: function (scope, el, attr, ctrl) {
            el.on('click', function ($event) {            
                if (ctrl.$viewValue && attr.customAttr) { // breakpoint
                }
            })   
        }
    }
})

目标:

在指令第一次运行时查看attr.customAttr中的正确值。

描述

在指令链接函数内的if语句的断点处停止,我希望看到一个布尔值。我已经使用$log.log()验证了模型中的布尔值是否正确。不幸的是,第一次运行指令时,attr.customAttr求值为模型值(调试器中的'controller.object.value')的引用字符串,然后在指令的后续迭代中,它正确地计算到布尔值。我尝试从属性中删除花括号,我只得到一个不变的空字符串。

我该怎么做才能使模型值第一次正确评估?

注意:我之前使用数值做了类似的版本没有问题。关键区别似乎是工作版本在输入元素上,并且具有ngModel和ngValue属性。

2 个答案:

答案 0 :(得分:0)

考虑使用

attrs.$observe('customAttr', function() {    
   scope.customAttr= scope.$eval(attrs.customAttr);
});

正确地双重绑定.attrs(因此,可能会解决您的问题)到您的指令。

answerdocs中的详细信息。

答案 1 :(得分:0)

事实证明,控制器和控制器属性对此有影响。我删除它,但后来决定我宁愿拥有控制器,所以我使用isolate scope来评估对象,而不是从attr属性中读取它。