我正在尝试使用require
连接两个指令并共享父控制器。
我在其他项目中已经完成了这么多次,但对于我的生活,我无法让这个工作......
指令控制器this
返回undefined,这反过来又难以将方法传递给子指令......
这是我的父指令代码:
app.directive('defaultHeader', () => {
let defaultHeaderCtrl = ($scope, $element) => {
let containEl,
elHeight = 500;
console.log(this) // returns 'undefined'
function resizeElement(el, height) {
el[0].style.height = `${height}px`
}
if (_.isUndefined($scope.coverImgUrl)) {
resizeElement($element, elHeight);
} else {
}
};
return {
restrict: 'A',
scope: {
coverImgUrl: '='
},
controller: defaultHeaderCtrl
};
});
This fiddle表明指令控制器this
应该返回构造函数。
如果有人有兴趣,可以参考以下内容:
<div default-header data="data"></div>
感谢您的帮助
答案 0 :(得分:6)
箭头功能(除了它们看起来整洁的事实)用于用上下文替换lexical this
。由于控制器也是在箭头函数中定义的,因此它的父上下文将为this
。在严格模式下是undefined
。
使用
function defaultHeaderCtrl ($scope, $element) { ... }
并且不要仅仅因为ES6允许这样而用箭头替换所有function
。
答案 1 :(得分:0)
在我开始查看我的代码和我发布的jsFiddle之间的差异之后,事情变得非常简单。
我正在使用babeljs,显然当我使用控制器() => {}
的箭头函数语法时,范围正在发生。
将其切换回function() {}
后,this
现在返回构造函数,指令按预期工作。