无法在 AngularJS 1.5 组件中要求指令



>我创建了一个运行良好的指令。现在,在angular碰到1.5.0之后,我认为这个指令是可以使用新的.component()符号编写的典型示例。

出于某种原因,require属性似乎不再有效。

下面是一个简化的示例:

angular.module('myApp', [])
.component('mirror', {
  template: '<p>{{$ctrl.modelValue}}</p>',
  require: ['ngModel'],
  controller: function() {
    var vm = this;
    var ngModel = vm.ngModel;
    
    ngModel.$viewChangeListeners.push(onChange);
    ngModel.$render = onChange;
    function onChange() {
      vm.modelValue = ngModel.$modelValue;
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
<div ng-app="myApp">
  <input ng-model="someModel"/>
  <mirror ng-model="someModel"></mirror>
</div>

我还尝试将require用作简单的字符串:

...
require: 'ngModel'
...

并作为对象:

...
require: {
  ngModel: 'ngModel'
}
...

我已经查看了$compile和组件的文档,但我似乎无法让它工作。

如何在 AngularJS 1.5 组件中要求其他指令控制器?

在 Angular 1.5 的组件语法中,在调用组件的$onInit生命周期方法之前,您无法访问所需的控制器。所以你需要把你的初始化移到那里,这是我添加$onInit函数的片段的工作版本。

angular.module('myApp', [])
.component('mirror', {
  template: '<p>{{$ctrl.modelValue}}</p>',
  require: {
    ngModel: 'ngModel',
  },
  controller: function() {
    var vm = this;
    
    vm.$onInit = function() {
      var ngModel = vm.ngModel;
      ngModel.$viewChangeListeners.push(onChange);
      ngModel.$render = onChange;
    };
    
    function onChange() {
      vm.modelValue = vm.ngModel.$modelValue;
    }
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
<div ng-app="myApp">
  <input ng-model="someModel"/>
  <mirror ng-model="someModel"></mirror>
</div>

相关内容

  • 没有找到相关文章

最新更新