如何通过AngularJS观看包含视图的内容?

时间:2013-06-30 16:32:59

标签: angularjs

我遇到以下代码的问题:

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

看起来手表不起作用,因为当我在视图中进行更改时,手表却没有 触发。这是因为在编译页面后加载了包含视图。

请注意,在将我的选择代码放入包含内容之前,一切正常。内联时一切正常:-(

任何人都可以告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分: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