Angular指令这个未定义

时间:2015-06-24 19:24:58

标签: javascript angularjs

为什么我在此Angular指令中调出undefined时得到this

(function() {
  'use strict';

  function ExampleDirective() {
    var self = this;

    // returns undefined
    console.log(self);

    return {};
  }

  angular
    .module('example')
    .directive('exampleDirective', ExampleDirective);

})();

1 个答案:

答案 0 :(得分:2)

这只是因为指令工厂没有新建(实例化)。因此,this non strict将在this模式中未定义(function() { 'use strict'; //Accept any dependencies here function ExampleDirective($timeout) { var self = this; // returns undefined console.log(self); this.restrict = 'AE'; this.templateUrl = "MyTemplate.html"; this.link = function(scope, elm, attrs){ } } ExampleDirective.factory = function () { //Create factory function which when invoked //angular will return newed up instance passing the timeout argument var directive = function ($timeout) { return new ExampleDirective($timeout); }; //directive's injection list directive.$inject = ['$timeout']; return directive; }; angular .module('example') .directive('exampleDirective', ExampleDirective.factory()); })(); 将是您不想污染的全局窗口。

但是,如果你真的想以这种方式编写它,那么在提供指令工厂时你需要自己新建并返回实例。

this

虽然在编写strict mode时可以使用此技术,但这可能是一种矫枉过正。如directives in typescript中所述,您可以使用控制器并将其与指令相关联。控制器被实例化(新建),Empty将指向控制器实例本身。