angularjs – 如何在没有表单且没有指令的情况下从Controller内部访问$ngModelController

前端之家收集整理的这篇文章主要介绍了angularjs – 如何在没有表单且没有指令的情况下从Controller内部访问$ngModelController前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
也许这是一个新手的错误,但我似乎无法访问$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.$解析器.这是一个例子:https://stackoverflow.com/a/15556249/215945

原文链接:/angularjs/143198.html

猜你在找的Angularjs相关文章