我有一个角度指令,它带有一个改变范围的方法,以便用 ng-show 显示/隐藏各种元素。范围属性有的在渲染,有的没有,这很奇怪。
指示:
.directive('ktTable', function(Query) {
return {
restrict: "AC",
templateUrl: '/partials/table.html',
link: function(scope, elm, attrs) {
scope.openForm = function(options, object) {
...
else if (options.checkin) {
scope.isDocument = true;
scope.new_object_type = "Document";
scope.isNew = false;
scope.isCheckin = true;
}
...
};
scope.$watch('isNew', function(nv, ov) {
console.log("isNew", nv, ov);
});
scope.$watch('isCheckin', function(nv, ov) {
console.log("isCheckin", nv, ov);
});
}
};
});
模板:
<fieldset class="newFile" ng-show="isNew || isCheckin">
<legend>New {{new_object_type}}</legend>
<input type="file" name="newFile" />
</fieldset>
...
<legend><span ng-show="isNew">New </span>{{new_object_type}} Information</legend>
当我刷新页面时,$watch 输出是未定义的,未定义的,这很好。无论如何,表格不在视图中。当我从 ng-click 调用此方法时,控制台输出为:
isNew false undefined directives.js:138
isCheckin true undefined directives.js:141
这正是我正在寻找的,但模板没有更新。调用 scope.$apply() 包装这些更改或在更改后调用 scope.$apply() 似乎对它没有任何作用。如果我将控制器中的 $scope.isNew 属性初始化为 true,我会看到字段集和 scope.new_object_type 属性设置正确。但是,scope.isNew/isCheckin 属性似乎永远不会影响模板。我应该怎么办?