也许这是一个新手错误,但我似乎无法访问$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
指令不是做你想要的,所以你不妨写你自己的指令。
你不应该把inicio
传递给view-value
指令。相反,将您自己的解析器添加到ngModelCtrl.$parsers
。下面是一个例子:https://stackoverflow.com/a/15556249/215945