Javascript 角度定向控制器“;这";返回未定义
我正在尝试使用Javascript 角度定向控制器“;这";返回未定义,javascript,angularjs,this,angular-directive,Javascript,Angularjs,This,Angular Directive,我正在尝试使用require和共享父控制器连接两个指令 我在其他项目中已经做了无数次了,但就我的一生而言,我无法让它发挥作用 指令控制器此返回未定义的,这反过来使将方法传递给子指令变得困难 以下是我的父指令代码: app.directive('defaultHeader', () => { let defaultHeaderCtrl = ($scope, $element) => { let containEl, elHeight
require
和共享父控制器连接两个指令
我在其他项目中已经做了无数次了,但就我的一生而言,我无法让它发挥作用
指令控制器此
返回未定义的,这反过来使将方法传递给子指令变得困难
以下是我的父指令代码:
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
};
});
显示指令控制器此应返回构造函数
如果有人感兴趣,这里有一些上下文:
- ui路由器模板是一个指令元素
- ui路由器解析数据,然后通过控制器将其传递给指令
感谢您的帮助在我开始研究我的代码和我发布的JSFIDLE之间的差异后,这一问题变得非常简单
我使用的是babeljs,显然当我使用控制器()=>{}
的箭头函数语法时,作用域发生了一些变化
在将其切换回function(){}
之后,this
现在返回构造函数,指令按预期工作
有关上下文^箭头函数(除了它们看起来整洁之外)的作用,请参见上面的标记答案。由于控制器也是在arrow函数中定义的,因此它将获得其父上下文作为this
。在严格模式下,它是未定义的
使用
不要仅仅因为ES6允许,就用箭头替换所有函数
。在指令代码中限制“A”,但在模板中,您将指令用作元素。谢谢@FidanHakaj-这只是示例代码,但是我修正了它,以便更好地表示实际的方向。我打开了你的小提琴,它记录的是Constructor{}
,而不是undefined@MarioLamacchia-完全正确-小提琴显示它应该返回构造函数,而我在项目中的指令并不完全正确:“不要仅仅因为ES6允许,就用箭头替换所有功能
“完美答案-将我的答案改为指向你的答案-我隐约记得在深入研究babel编译器时读到了词法this
-我想我需要重新审视一下:)是的,这是对旧var self=this
模式的优雅替代。
function defaultHeaderCtrl ($scope, $element) { ... }