我正在学习AngularJS,我有一个问题。
这是我的代码:
HTML(查看):
...
<table>
<tr ng-repeat="student in students">
<td ng-class="{'student-highlight' : isStudent}">
<input type="checkbox"
ng-model="student.option"
ng-change="isStudent = checkStudent(student)" />
</td>
...
<button type="button" ng-click="submit()">SUBMIT</button>
控制器:
$scope.checkStudent = function(student) {
if(some_logic)
return true; // It returns true for now
else
return false;
};
$scope.submit = function() {
// I want to change isStudent in the view to false
};
因此,当用户更改输入框时,它返回true,因此CSS类会突出显示单元格&#39;学生突出显示&#39;。我想改变价值&#39; isStudent&#39;在用户点击按钮后的视图中提交&#39;。
为此,我在控制器中使用了$$ childHead:
for(var cs = $scope.$$childHead; cs; cs = cs.$$nextSibling) {
if(cs.isStudent)
cs.isStudent = false;
}
但我不喜欢我在这里做的事情 - 它并不漂亮。我想我可以使用$ scope。$ emit()或$ scope。$ broadcast(),但我不知道如何。
请帮帮我!!
答案 0 :(得分:1)
也许您可能想看一下Angularjs表单验证。
首先,在input.ng-dirty下定义学生突出显示
然后要清除学生突出显示,您可以在submit()中调用$ scope.form。$ setPristine()来重置表单。
答案 1 :(得分:1)
执行此操作的方法是在控制器中使用bools = {}
对象。然后,您的视图和控制器可以只访问bools.isStudent
获取当前值。当您迁移到首选的Controller As
语法时,这会变得更好。
顺便说一句,你不应该使用任何$$属性,因为它们是私有的。来自documentation:
$ Prefix Naming Convention
您可以创建自己的服务,事实上我们将在第11步中完成。作为命名约定,Angular的内置服务,Scope方法和一些其他Angular API在名称前面都有$前缀
$前缀用于命名空间Angular提供的服务。为了防止冲突,最好避免命名您的服务并模拟以$开头的任何内容。
如果您检查Scope,您可能还会注意到一些以$$开头的属性。这些属性被视为私有,不应被访问或修改。