指令不适用于ng-if

时间:2017-01-25 18:36:52

标签: angularjs angularjs-directive angular-directive

除非我在包含元素上使用ng-if,否则我有以下指令正常工作。我想要做的只是在范围内使用相关函数设置动态属性。范围不包含属性(未定义)。

任何帮助都会很棒!

app.directive('stRefresh', function () {
    return {
        require: '^stTable',
        link: function (scope, ele, attr, ctrl) {
            if (attr.stRefresh) {
                var name = attr.stRefresh;
                scope[name] = scope[name] || {};
                scope[name].refresh = function () {
                    return ctrl.search();
                };
            }
        }
    }
});

1 个答案:

答案 0 :(得分:2)

知道哪些不起作用会很有帮助,但我怀疑你被the problem of nested scopes咬了。

ng-if指令创建子范围。在指令中修改范围时:

scope[name] = scope[name] || {};

您正在修改子范围。由于原型继承,这不会修改父级的范围。因此,如果您希望看到父范围发生变化,您将看不到它。

要修复它,您需要在范围参考中添加一个点。像这样:

scope.data[name] = scope.data[name] || {};
scope.data[name].refresh = function () {
    return ctrl.search();
};

scope.data属性需要是对象的引用。由于您没有修改引用,因此可以从父范围和子范围修改该对象的属性。