为什么我在此Angular指令中调出undefined
时得到this
?
(function() {
'use strict';
function ExampleDirective() {
var self = this;
// returns undefined
console.log(self);
return {};
}
angular
.module('example')
.directive('exampleDirective', ExampleDirective);
})();
答案 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
将指向控制器实例本身。