【发布时间】:2015-06-04 14:29:40
【问题描述】:
我在表单上方有一个表,即选择一行时,它会填充具有数据的表单。该表单有一个选择元素。选择表中的第一行后,数据会正确填充并显示正确的选择选项。在第二次和随后的选择中,未显示正确选择的选项。在 chrome 开发工具中,我可以看到值正确更新,但没有直观显示。
我错过了什么?如何以视觉方式显示正确的选项?
<select name="updateCategory" ng-model="selectedPermission.permission.category_id">
<option value="{{cat.id}}" ng-selected="cat.selected" ng-repeat="cat in selectedPermission.permission_categories">
{{cat.name}}
</option>
</select>
这是控制器中正在更新范围的函数。
$rootScope.$watch('toolBarSelectedValue',function(){
if($rootScope.toolBarSelectedValue >0){
Permissions.getItem($rootScope.toolBarSelectedValue).then(function(res){
var pc = res.data.permission_categories;
var p = res.data.permission;
angular.forEach(pc,function(v,k){
if(v.id == p.category_id){
pc[k].selected = true;
}else{
pc[k].selected = false;
}
});
$scope.selectedPermission = {"permission":p,"permission_categories":pc};
$scope.$apply();
});
}else if($rootScope.toolBarSelectedValue == 0 || $rootScope.toolBarSelectedValue == null){
$scope.selectedPermission = {};
}
});
【问题讨论】:
-
为什么不触发事件而不是使用 $watch?
-
我会使用 ng-options 而不是
您可以轻松地将您的选择与您的 ng-model 相关联。请参阅文档docs.angularjs.org/api/ng/directive/ngOptions -
这里使用了超过 1 个指令。使用 $rootScope 更容易。虽然我是新手,所以可能不合适。
-
是的,您应该使用带有 $scope 变量的 ng-model 属性的 ng-options。你能告诉我们你的新代码吗?
-
好的,ng-options 解决了这个问题。我以为它不起作用,但我犯了拼写错误。请提交答案以获得信用。
标签: javascript angularjs