指令不适用于 ng-if
Directive not working with ng-if
我有以下指令可以正常工作,除非我也在包含元素上使用 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();
};
}
}
}
});
知道什么不起作用会很有帮助,但我怀疑你被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
属性 需要是对对象的引用。由于您没有修改引用,因此可以从父范围和子范围修改该对象的属性。
我有以下指令可以正常工作,除非我也在包含元素上使用 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();
};
}
}
}
});
知道什么不起作用会很有帮助,但我怀疑你被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
属性 需要是对对象的引用。由于您没有修改引用,因此可以从父范围和子范围修改该对象的属性。