我有一个角度应用程序设置如下.Ng-repeat包含li元素,每个元素有2个输入(远远超过2,但对于此演示,我有2个).
该指令设置控制器.
HTML
<li ng-repeat="lw in lw_list" my-lw ng-model="lw" >
<input my-cell ng-init="init(lane , $index , 'name')" ng-class="'lib_name inline_div'" type='text' value="{{ lw.library.name }}" >
<input my-cell ng-init="init(lane , $index , 'volume') "ng-class="'number_field'" type="number" ng-model='volume' />
</li>
Run Code Online (Sandbox Code Playgroud)
JavaScript的
angular.module('Demo').directive("myCell", function(CellStore){
return {
controller : 'CellCtrl' ,
};
}) ;
angular.module('Demo').controller('CellCtrl' , function($scope , CellStore){
$scope.init = function(lane, row, column){
$scope.row = row ;
$scope.column = column ;
console.log("init" , $scope.$parent );
CellStore.addCell( lane.lane, row, column , $viewValue ) ;
} ;
}) ;
Run Code Online (Sandbox Code Playgroud)
因此,我们的想法是,在创建每个输入时,它将调用init函数,该函数将输入值存储在嵌套哈希中(以便稍后检索).但是我不知道如何从控制器中访问$ viewValue变量(输入包含的值).
XML*_*XML 11
其他人已经解决了你的问题,但我没有看到你的主要问题的答案,如果你想这样做,如何从控制器访问$ viewValue.
你真正在做的是访问附加到每个输入的ngModelController实例.如果只是name在表单元素和其中的每个输入上放置一个属性,那么它们的控制器就可以访问了$scope.(因为你正在使用ng-repeat,所以你需要某种动态命名方案,这样你就可以实现它们.你也可以迭代它们.)
一旦你命名了所有东西,获得实例,它只是:
var instance = $scope.formName.inputName;
Run Code Online (Sandbox Code Playgroud)
并且$ viewValue应该是:
instance.$viewValue
Run Code Online (Sandbox Code Playgroud)
一旦你有了这个参考,你也可以使用ngModelController上的其他方法,比如
instance.$setValidity();
Run Code Online (Sandbox Code Playgroud)
编辑:你可以在这个Codepen上玩这个,看看它与一些验证问题的关系.