如何从指令控制器访问ngModel

时间:2016-05-10 19:05:37

标签: directive angularjs-ng-model controlleras

function prMySelects() {
  var ddo = {
    restrict: 'E',
    templateUrl: 'template.html',
    require: '?ngModel',
    scope: {
      ngModel: '='
    },
    controller: prMySelectsController,
    controllerAs: 'vm',
    bindToController: true
  };
  return ddo;
}

function prMySelectsController($locale) {
   ...
}

我需要在指令控制器内部进行一些检查并设置ngModel。$ setValidity('some',false),但是出现ngModel is not defined错误。注入ngModel没有帮助......

PS我知道我可以在link中访问它,但是可以在指令controller中访问ngModel控制器吗?

1 个答案:

答案 0 :(得分:1)

这种功能最好在指令的链接功能中完成。

function prMySelects() {
    return {
       restrict: 'E',
       require: '?ngModel',
       link: function(scope, element, attributes, ngModel) {
          scope.theModel = ngModel;
       },
       controller: function() {
           var vm = this;
            vm.theModel.$setViewValue...
       }
    }
}

在这种情况下,您实际上正在获取一个挂钩到ngModel控制器,并且它不需要您在范围上实际指定它。