无法在AngularJS 1.5组件中使用指令

Rem*_*ing 11 angularjs angularjs-1.5

我已经创建了一个完全正常的指令.现在撞击后angular1.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;
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)

我也试过require用作简单的字符串:

...
require: 'ngModel'
...
Run Code Online (Sandbox Code Playgroud)

并作为一个对象:

...
require: {
  ngModel: 'ngModel'
}
...
Run Code Online (Sandbox Code Playgroud)

我看过$ compilecomponent的文档,但我似乎无法让它工作.

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

Sco*_*ott 20

在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;
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)