Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度定向控制器“;这";返回未定义_Javascript_Angularjs_This_Angular Directive - Fatal编程技术网

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) { ... }