在范围更改时查看不更新

时间:2013-03-06 17:57:25

标签: angularjs angularjs-directive

我有一个角度指令,其方法可以改变范围,以便用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

这正是我正在寻找的,但模板没有更新。调用范围。$ apply()包装这些更改或调用范围。$ apply()在更改之后似乎没有做任何事情。如果我将控制器中的$ scope.isNew属性初始化为true,我会看到fieldset并且scope.new_object_type属性设置正确。但是,scope.isNew / isCheckin属性似乎永远不会影响模板。我该怎么办?

0 个答案:

没有答案