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 回答