Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以下angularJS声明属于哪个名称空间?_Javascript_Angularjs_Angularjs Directive - Fatal编程技术网

Javascript 以下angularJS声明属于哪个名称空间?

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', '

我对angularJS是新手

当我在angularJS指令中声明var或函数时,函数()和aVar属于哪个名称空间

以这种方式声明它们是正确的还是应该在它们前面加上前缀,比如,$scope

以下是一段代码片段:

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提供了非常全面和有用的答案