在检索动态ng-model的值时出错。
(Error in retrieving value of dynamic ng-model)这个问题的出现原因是在HTML代码中,ng-model的值是动态生成的,但是在控制器中没有正确地初始化对应的$scope变量。
解决方法是在控制器中给$scope.Ques对象的对应属性赋一个初始值。可以通过遍历$scope.dummy数组,并使用数组中每个元素的id属性作为属性名,给$scope.Ques对象添加对应的属性。代码如下:
app.controller("myCtrl", function($scope){ $scope.dummy = [ {name:"name1",value:"red",id:"id1"}, {name:"name2",value:"blue",id:"id2"}, {name:"name3",value:"yellow",id:"id3"}, ]; $scope.Ques = {}; // 给$scope.Ques对象添加对应的属性 angular.forEach($scope.dummy, function(val, key) { $scope.Ques[val.id] = ''; }); $scope.ok = function(){ angular.forEach($scope.dummy, function(val, key) { console.log($scope.Ques[val.id]); }); } });
这样就解决了错误的问题,并且可以正确地获取动态ng-model的值。
问题的原因是在ngRepeat中,它创建了一个子$scope。为了使其正常工作,应该使用“Dot Rule”或“controller-as-syntax”。
解决方法是在view中使用代码`$scope.model = {};`,然后使用以下代码:
在控制器中使用以下代码:
$scope.dummy = [ { "name":"name1", "value":"red", "id":"id1" }, { "name":"name2", "value":"blue", "id":"id2" }, { "name":"name3", "value":"yellow", "id":"id3" } ]; $scope.model = {}; $scope.ok = function() { // With your original code: angular.forEach($scope.dummy, function(val, key) { console.log($scope.model.Ques[val.id]); }); // Or you can get all key / values stored in radio buttons: /*for (var key in $scope.model.Ques) { console.log('Key => ', key); console.log('Value => ', $scope.model.Ques[key]); }*/ }
最后,在HTML中使用以上代码进行引用。
参考文献:链接。