也许这是一个新手的错误,但我似乎无法访问$scope.model的$ngModelController,所以我可以抓住$viewValue从它。
$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.inicio
01012014
$scope.myForm.inicio.$viewValue
我知道我可以做的事情,但看起来有些笨拙,必须有一种更简单的方法:
$scope.myForm.input.$viewValue
$('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指令没有执行您想要的操作,因此您最好编写自己的指令。
ui-mask
您不必传递inicio给view-value指令。而是将您自己的解析器添加到中ngModelCtrl.$parsers。
inicio
view-value
ngModelCtrl.$parsers