无法在 AngularJS 1.5 组件中要求指令
Unable to require directive in AngularJS 1.5 component
我创建了一个运行良好的指令。现在,在将 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 and component 的文档,但我似乎无法让它工作。
如何在 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>
我创建了一个运行良好的指令。现在,在将 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 and component 的文档,但我似乎无法让它工作。
如何在 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>