在下面的示例中,“ccSpinner”参数和输出参数是吗?他们到底是什么?如果不是,该名称如何传入,然后在函数上重复?我整个星期都在阅读AngularJS和JavaScript教程,但没有任何内容可以解释这部分?
angular
.module('app.widgets')
.directive('ccSpinner', ['$window', ccSpinner]);
function ccSpinner($window) {
// snip
};
最佳答案
这里实际发生了几件事。
全局范围
第一个ccSpinner
在全局范围implicitly上可用。如果您不将函数声明包装在closure中,则它将在全局范围内隐式可用。
一个JS文件中的示例:
function globalAvailable() {
console.log('this can be called anywhere');
}
其他一些JS文件:
globalAvailable(); // logs the above
吊装
JavaScript具有variable and function hoisting。
从本质上讲,这意味着您可以在函数出现在代码中之前使用它。基本上,浏览器会对此进行更改:
hoistedFunction();
function hoistedFunction() {
console.log('the above call still works');
}
至:
function hoistedFunction() {
console.log('the above call still works');
}
hoistedFunction();
Angular 依赖注入(inject)
以上所有因素都会影响相关行:
directive('ccSpinner', ['$window', ccSpinner]);
这样做是创建一个新的
ccSpinner
指令,该指令可通过AngularJS框架使用。然后:
['$window', ccSpinner]
表示ccSpinner
伪指令需要$window
并将function ccSpinner
设置为ccSpinner
伪指令的定义。您可以将行更改为:
directive('awesomeSpinner', ['$window', ccSpinner]);
并在使用现有
awesomeSpinner
指令的地方使用新的ccSpinner
指令,它的工作方式相同。关于javascript - AngularJS指令是否使用输出参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26812095/