也许这是一个新手的错误,但我似乎无法访问$scope.model的$ngModelController,所以我可以从中获取$viewValue.
我有一个没有表单的输入(我使用ui-mask指令):
<input type="text" ng-model="inicio" name="inicio" ui-mask="99/99/9999">
// inside my controller $scope.inicio = dateFilter((new Date).getTime(),'dd/MM/yyyy');
ui-mask将$modelValue设置为与$viewValue不同的值,这使得很难将格式化数据发送到服务器.当$scope.inicio模型更改时,该值是一个没有斜杠的日期,如01012014.所以我需要能够为该输入获取控制器,但不必将其包装在表单中,并且必须使用$scope .myForm.inicio.$viewValue.它必须是可能的……
我知道我可以做的事情,但似乎很骇客,必须有一个更简单的方法:
>将元素放在表单中并通过$scope.myForm.input.$viewValue访问它
>使用jQuery $(‘input [name =“inicio”]’)获取元素数据.data(‘$ngModelController’);
>使用angular.element(‘input [name =“inicio”]’)获取元素.controller(‘ngModel’);
>创建一个指令,将其放入输入中,并使用它更新我的范围模型
app.directive('viewValue',function(){ return { priority: 10,require: 'ngModel',link: function(scope,element,attrs,controller){ scope.$watch(attrs.viewValue,function(newValue,oldValue){ if (newValue !== oldValue){ scope[attrs.viewValue] = controller.$viewValue; } }); } } });
<input type="text" ui-mask="99/99/9999" ng-model="inicio" view-value="inicio">
我喜欢指令替代方案.本质上,ui-mask指令没有做你想要的,所以你也可以编写自己的指令.
原文链接:/angularjs/143198.html您不必将inicio传递给view-value指令.而是将您自己的解析器添加到ngModelCtrl.$解析器.这是一个例子:https://stackoverflow.com/a/15556249/215945