微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐