0

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 プロパティがテンプレートに影響を与えることはないようです。私は何をすべきか?

4

0 に答える 0