1

次のコードに問題があります。

<tab heading="Topic Search">
   <div data-ng-controller="AdminGridQuestionSubjectController">
      <ng-include src="'/Content/app/admin/partials/grid-question-subject.html'"></ng-include >
   </div>
<div>

私が持っているコントローラで:

    $scope.$watch('selectedSubject', function () {
        if ($scope.selectedSubject != null) {
            gridService.getTopicSelect($scope);
            gridService.getQuestionStatusSelect($scope);
        }
    })

含まれている grid-question-subject.html ビューには次のものがあります。

  <select
     data-ng-disabled="subjects.length == 0"
     data-ng-model="selectedSubject"
     data-ng-options="item.id as item.name for item in subjects">
     <option style="display: none" value="">Select Subject</option>
  </select>

ビューを変更してもウォッチがトリガーされないため、ウォッチが機能していないようです。これは、ページがコンパイルされた後にインクルード ビューが読み込まれるためです。

選択コードをインクルードに入れるまで、すべてが正常に機能したことに注意してください。インラインの場合、すべて正常に機能しました:-(

これを解決する方法を誰か教えてください。

4

1 に答える 1

5

完成したコードは見ていませんが、selectedSubject がプリミティブ型であることは確かです。したがって、以下のようにコードを変更してください。

オプション -1 より良いアプローチ

In controller 

  $scope.data= { selectedSubject: '' };
              $scope.$watch('data.selectedSubject', function () {
                  if ($scope.data.selectedSubject!= null) {
                      alert("changed");
                  }
              })


and in template 

<select
     data-ng-disabled="subjects.length == 0"
     data-ng-model="data.selectedSubject"
     data-ng-options="item.id as item.name for item in subjects">
     <option style="display: none" value="">Select Subject</option>
  </select>

オプション 2 以下のようにテンプレートを変更するだけです

<select
     data-ng-disabled="subjects.length == 0"
     data-ng-model="$parent.selectedSubject"
     data-ng-options="item.id as item.name for item in subjects">
     <option style="display: none" value="">Select Subject</option>
  </select>

理由: https://github.com/angular/angular.js/wiki/Understanding-Scopes

于 2013-06-30T17:12:48.710 に答える