javascript - Angular Directive(指令) Controller "this"返回未定义

标签 javascript angularjs this angular-directive

我正在尝试使用 require 连接两个指令并共享父 Controller 。

我已经在其他项目中这样做了无数次,但对于我来说,我无法让它发挥作用......

指令 Controller this正在返回未定义的,这反过来使得很难将方法传递给子指令...

这是我的父指令代码:

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显示指令 Controller this应该返回构造函数。

如果有人感兴趣,这里有一些背景:

  • ui 路由器模板是一个指令元素 <div default-header data="data"></div>
  • ui router解析数据,然后通过controller传递给directive

感谢帮助

最佳答案

箭头函数(除了它们看起来整洁之外)用于替换 lexical this与上下文。由于 Controller 也是在箭头函数中定义的,因此它将获得其父上下文作为 this。在严格模式下是 undefined

使用

function defaultHeaderCtrl ($scope, $element) { ... }

并且不要仅仅因为 ES6 允许就用箭头替换所有 function

关于javascript - Angular Directive(指令) Controller "this"返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34119237/

相关文章:

javascript - 将 angular.morris-chart 添加到 Angular 应用程序

angularjs - 是否可以在测试中覆盖模块配置函数的常量?

树结构中的 C++ 指针

jquery - 我可以计算表 "$("这个 tbody tr").length 的行数吗?

javascript - 与谷歌地图 API 的标记数组作斗争

javascript - 在 Angular 配置中使用带有 $http 和 $q 的服务/提供者

javascript - 从函数值中打破 promise 图?

angularjs - 是否可以通过从某个索引开始循环并在另一个索引处结束来限制显示结果的数量 "ng-repeat"

javascript - AngularJS 和 Django : Conflicting routing

javascript - 检查当前单击的元素是否等于 JQuery 中的特定 div 'id'