我正在尝试用angular es6开发一个应用程序。我对directve有点问题。以下是我的代码
export default class RoleDirective {
constructor() {
this.template="";
this.restrict = 'A';
this.scope = {
role :"@rolePermission"
};
this.controller = RoleDirectiveController;
this.controllerAs = 'ctrl';
this.bindToController = true;
}
// Directive compile function
compile(element,attrs,ctrl) {
console.log("df",this)
}
// Directive link function
link(scope,element,attrs,ctrl) {
console.log("dsf",ctrl.role)
}
}
// Directive's controller
class RoleDirectiveController {
constructor () {
console.log(this.role)
//console.log("role", commonService.userModule().getUserPermission("change_corsmodel"));
//$($element[0]).css('visibility', 'hidden');
}
}
export default angular
.module('common.directive', [])
.directive('rolePermission',[() => new RoleDirective()]);
问题是我不能在构造函数中获取角色的值。下面是我的html实现
<a ui-sref="event" class="button text-uppercase button-md" role-permission="dfsd" detail="sdfdsfsfdssd">Create event</a>
如果我对此进行控制台操作,它将获得控制器对象。但是当使用this.role时,它不会得到任何结果。
发布于 2017-01-10 16:11:35
好的,所以我设法找出了它是如何工作的。
基本上,作用域值不能在控制器的构造函数上初始化(因为这是在新对象上执行的第一件事),而且还需要考虑绑定。
有一个钩子可以在您的控制器中实现,它可以帮助您处理您的用例:$onInit
class RoleDirectiveController {
constructor () {
// data not available yet on 'this' - they couldn't be
}
$onInit() {
console.log(this.role)
}
}
这应该是可行的。请注意,当不再依赖$scope保存模型时,这是一种angular1.5+方式。因为如果你使用作用域,你可以把它放在控制器的构造函数中(注入)。
https://stackoverflow.com/questions/41563351
复制相似问题