角度范围变量未更新

时间:2017-06-17 16:33:57

标签: angularjs

我对Angular相当新,但似乎这应该有效:

HTML:

<div style="float:left;width:26%;height:96%;margin:2% 0 2% 0;background-color:#efefef;padding:0 2% 0 2%;" ng-app="fcApp"
     ng-controller="fcCtrl">
<span>Find:</span>
<input id="student_search" type=text
       ng-keypress="selectFirstStudent($event)"
       ng-model="student_search" placeholder="name / ssn">
<div style="max-height:90%;" ng-show="student_search">
    <div style="width:100%;height:30px;"
        ng-repeat="student in students | filter:student_search as filtered"
        ng-click="newStudent(student);">
        {{ student.firstname }} {{ student.lastname }} - {{ student.ssn }}
    </div>
</div>

<div style="float:left;width:70%;">
    <input id="ssn" ng-model="student.ssn">
    {{ student.ssn }}
</div>

控制器(局部的):

$scope.getStudents = function(){
    $http.get('/getstudents/')
        .then(function(response){
            $scope.students = response.data.students;
            $scope.student = $scope.students[0];
        }
    );
};
$scope.getStudents();

所以getStudents函数显然在它实际从数据库中获取学生列表的程度上起作用。但我的所有$scope变量都没有更新。

当我在输入框中键入部分名称时,学生列表会被正确过滤掉,并且列表会变短。但是,我在列表中看不到任何值,只有&#34; - &#34;应该出现在姓氏和SSN之间。它出现在过滤结果的每一行上。

没有提供所有代码,但是当我点击已过滤列表中的某个项目时,我会收到一条显示所选学生ID和SSN的提醒。所以数据存在,它只是没有出现在Angular变量中。另外,最后一个div应该两次显示学生SSN,对吧?那里也没有。顺便说一下,单击已过滤的列表会触发事件,该事件将$scope.student设置为单击的学生对象,如我的警告所示。

那么,为什么我没有在过滤后的列表或设置ng-model的输入中看到任何值?

1 个答案:

答案 0 :(得分:0)

您正在使用

$scope.student = $scope.students[0];

在你的方法中。

ng-repeat="student in students | filter:student_search as filtered"

两者都是相同的变量,因此您的DOM不会更新。

尝试使用下面的其他名称,例如我正在使用stud

<div style="max-height:90%;" ng-show="student_search">
    <div style="width:100%;height:30px;"
        ng-repeat="stud in students | filter:student_search as filtered"
        ng-click="newStudent(stud);">
        {{ stud.firstname }} {{ stud.lastname }} - {{ stud.ssn }}
    </div>
</div>