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

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...