我对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
的输入中看到任何值?
答案 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>