当我使用typescript创建angularjs指令时,我使用属性bindToController
将参数绑定到控制器,以便我可以访问它们
export class MyDirective implements IDirective {
controller = MyController;
controllerAs = 'vm';
bindToController = {
paramOne: '<',
paramTwo: '<'
};
}
export class MyController {
paramOne: boolean; // theses params are now set and I can use them
paramTwo: boolean;
...
}
但现在我意识到不推荐使用接口IDirective的参数bindToController,尽管它仍然有效。
/**
* @deprecated
* Deprecation warning: although bindings for non-ES6 class controllers are currently bound to this before
* the controller constructor is called, this use is now deprecated. Please place initialization code that
* relies upon bindings inside a $onInit method on the controller, instead.
*/
该消息应该解释它,但我仍然没有得到它。
任何人都可以解释为什么这个被弃用了,最好的方法是什么?
答案 0 :(得分:2)
bindToController
并未弃用。描述的行为是。 TS接口中的注释引用this part of the manual。
当前绑定的范围属性在某些条件下已在控制器构造函数中可用(此时,父控制器中应该可以使用绑定的父范围属性)。
不推荐使用此行为,绑定可能在控制器构造函数in future中不可用。建议将依赖于绑定的所有代码从构造函数移动到$onInit
hook。
默认行为在1.6中已更改,可以使用$compileProvider.preAssignBindingsEnabled
进行更改。