为什么在Typescript中不推荐使用bindToController?

时间:2016-08-09 13:06:50

标签: angularjs typescript binding

当我使用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.
*/

该消息应该解释它,但我仍然没有得到它。

任何人都可以解释为什么这个被弃用了,最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

bindToController并未弃用。描述的行为是。 TS接口中的注释引用this part of the manual

当前绑定的范围属性在某些条件下已在控制器构造函数中可用(此时,父控制器中应该可以使用绑定的父范围属性)。

不推荐使用此行为,绑定可能在控制器构造函数in future中不可用。建议将依赖于绑定的所有代码从构造函数移动到$onInit hook。

默认行为在1.6中已更改,可以使用$compileProvider.preAssignBindingsEnabled进行更改。