在下面的示例中,“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/

10-09 15:05