Javascript 以下angularJS声明属于哪个名称空间?
我对angularJS是新手 当我在angularJS指令中声明var或函数时,函数()和aVar属于哪个名称空间 以这种方式声明它们是正确的还是应该在它们前面加上前缀,比如,$scope 以下是一段代码片段:Javascript 以下angularJS声明属于哪个名称空间?,javascript,angularjs,angularjs-directive,Javascript,Angularjs,Angularjs Directive,我对angularJS是新手 当我在angularJS指令中声明var或函数时,函数()和aVar属于哪个名称空间 以这种方式声明它们是正确的还是应该在它们前面加上前缀,比如,$scope 以下是一段代码片段: define(['aName'], function () {'use strict'; angular.module('aName').directive('aName', ['$compile', 'serviceName', '$parse', '
define(['aName'], function () {'use strict';
angular.module('aName').directive('aName', ['$compile', 'serviceName',
'$parse', '$window', '$document', function ($compile, serviceName, $parse,
myWindow, $document) { return {
...
function aFunction() { ... } //or should it be $scope.aFunction?
var aVar = function anotherFunction() { ... } //or should it be $scope.aVar?
...
};
}]);
});
angularjs中的名称空间不是最强大的部分。事情最终会转到一个名为
角度的对象。这里定义了几个函数,您可以使用它们来创建对象,如模块
。这对于(我们依赖于使用服务名称的依赖注入)或全局函数控制器来说是特别有问题的。
模块是一个逻辑组,例如,指令或控制器,但它不是隔离组件的一种方法。试试吃。
在本教程中,它们将控制器定义为全局函数:
function MainCtrl() {...}
而不是使用模块,至少不会污染全局命名空间
app.controller('MainCtrl', function ($scope) {
directive()返回DDO(指令定义对象),如:
如果不使用var
,它将尝试按照javascript范围规则将其解析为全局对象
您的第二个示例var aVar=function anotherFunction(){…}
是一个仅在当前[javascript]范围内可用的函数,即在您拥有它的任何函数中。例如:
link: function(...) {
/* and it becomes available */
f();
var g = function () {...};
g(); // only works in the scope of link();
}
如果您希望将此函数公开给视图,那么对于类似
的内容,您可能应该将其包含在范围内。在作用域中定义此函数的最佳位置是控制器或链接函数:
在控制器中
app.controller('MainCtrl', function ($scope) {
$scope.name = 'World';
$scope.fireFn = function() {...}; // scope is the injected service. use the $
});
在链接器中:
link: function(scope) {
/* and it becomes available */
f();
var g = function () {...};
g(); // only works in the javascript scope (not the parameter!) of link();
scope.fireFn = function() {...}; // scope is the first parameter
}
至于隔离模块,将其置于封闭中不会造成任何伤害:
(function () {
"use strict";
var mymodule = angular.module('mymodule', []);
}());
angularjs中的名称空间不是最强大的部分。事情最终会转到一个名为角度的对象。这里定义了几个函数,您可以使用它们来创建对象,如模块
。这对于(我们依赖于使用服务名称的依赖注入)或全局函数控制器来说是特别有问题的。
模块是一个逻辑组,例如,指令或控制器,但它不是隔离组件的一种方法。试试吃。
在本教程中,它们将控制器定义为全局函数:
function MainCtrl() {...}
而不是使用模块,至少不会污染全局命名空间
app.controller('MainCtrl', function ($scope) {
directive()返回DDO(指令定义对象),如:
如果不使用var
,它将尝试按照javascript范围规则将其解析为全局对象
您的第二个示例var aVar=function anotherFunction(){…}
是一个仅在当前[javascript]范围内可用的函数,即在您拥有它的任何函数中。例如:
link: function(...) {
/* and it becomes available */
f();
var g = function () {...};
g(); // only works in the scope of link();
}
如果您希望将此函数公开给视图,那么对于类似
的内容,您可能应该将其包含在范围内。在作用域中定义此函数的最佳位置是控制器或链接函数:
在控制器中
app.controller('MainCtrl', function ($scope) {
$scope.name = 'World';
$scope.fireFn = function() {...}; // scope is the injected service. use the $
});
在链接器中:
link: function(scope) {
/* and it becomes available */
f();
var g = function () {...};
g(); // only works in the javascript scope (not the parameter!) of link();
scope.fireFn = function() {...}; // scope is the first parameter
}
至于隔离模块,将其置于封闭中不会造成任何伤害:
(function () {
"use strict";
var mymodule = angular.module('mymodule', []);
}());
非常感谢Eduard提供了非常全面和有用的答案非常感谢Eduard提供了非常全面和有用的答案