AngularJS函数到另一个文件
我有一个AngularJS脚本(将在web上运行),一些特定的函数开始变得非常长,足够长,以至于我构建了一个电子表格来生成所有不同的AngularJS函数到另一个文件,angularjs,Angularjs,我有一个AngularJS脚本(将在web上运行),一些特定的函数开始变得非常长,足够长,以至于我构建了一个电子表格来生成所有不同的cases,然后我简单地将它们粘贴到代码中 (function(){ var app = angular .module('app',[]) .controller('HostController',HostController); HostController.$inject = ['$scope']; f
case
s,然后我简单地将它们粘贴到代码中
(function(){
var app = angular
.module('app',[])
.controller('HostController',HostController);
HostController.$inject = ['$scope'];
function HostController($scope){
var host = this;
host.variable = "some text";
function reallyLongFunction(a,b) {
switch(a) {
case "something":
switch(b) {};
break;
case "something else":
switch(b) {};
break;
};
}
}
})();
我想把它们移出主文件,这样在我处理程序的其余部分时,它就不会被这些长的、生成的函数弄乱
我可以简单地将函数直接移动到另一个文件中,但它们需要访问类型为host.variable
的变量,因此我相信它们需要在主Angular应用程序的范围内
如何将这些函数移动到不同的文件中,同时保留它们对这些变量的访问权限?您也可以通过创建角度服务将方法移动到单独的文件中。将该服务注入控制器并访问方法,如
someSvcHelper.reallyLongFunction(a,b)
。该方法也将使您的这种方法成为通用方法,并将适用于其他控制器
但在这种情况下,您必须将此函数所需的变量作为参数传递。您也可以通过创建角度服务将方法移动到单独的文件中。将该服务注入控制器并访问方法,如
someSvcHelper.reallyLongFunction(a,b)
。该方法也将使您的这种方法成为通用方法,并将适用于其他控制器
但在这种情况下,您必须将此函数所需的变量作为参数传递。使用嵌套的
ng controller
,您可以访问$scope
中的其他控制器作用域
angular.module('app',[])
.controller('ctrl',function(){
var vm=这个;
vm.value=1;
})
.controller('auxCtrl',函数($scope){
var aux=此;
aux.result=函数(){
返回$scope.vm.value+5;
}
});代码>
{{vm.value}}
{{aux.result()}}
使用嵌套的ng控制器
,您可以访问$scope
中的其他控制器作用域
angular.module('app',[])
.controller('ctrl',function(){
var vm=这个;
vm.value=1;
})
.controller('auxCtrl',函数($scope){
var aux=此;
aux.result=函数(){
返回$scope.vm.value+5;
}
});代码>
{{vm.value}}
{{aux.result()}}
如果您的'HostController'
使用某个视图向$stateprovider
注册,那么您只需在另一个文件中写入另一个控制器,并通过执行类似于ng controller“HostController\u 2”的操作将第二个控制器包含到同一视图中即可
通过这种方式,您将可以访问这两个控制器如果您的'HostController'
是通过某个视图向$stateprovider
注册的,那么您只需在另一个文件中写入另一个控制器,并通过执行类似于ng controller“HostController\u 2”的操作将第二个控制器包含到同一视图中即可
通过这种方式,您可以访问这两个控制器。服务中还可以有一个主机
变量,他可以在调用方法之前设置值。我认为这种方式会更好,因为正如他所说的,他会有很多这样的函数。这似乎是最有角度的方式,但是传递我需要的所有变量在这里并不可行,因为它们的数量太多了。他也可以在服务中有一个host
变量,他可以在调用方法之前设置值。我认为这种方法会更好,因为正如他所说的,他会有很多这样的函数。这似乎是处理事情的最有角度的方法,但传递我需要的所有变量在这里并不真正可行,因为它们的数量太多。这似乎非常有用-我有没有办法补充,比如,父控制器的4个子控制器,而不将每个子控制器嵌套在其他未使用div的matryoshka中?如果我这样做了,对于嵌套更深的控制器,我是否需要使用$scope.$scope.vm.value等等?我已经做了一个基于服务的替代方案,检查它是否解决了您的问题;)我设法让它工作起来了!不过,最后一个问题是——控制器中的变量写为$scope.myName
——我更喜欢使用“controller as”语法,因此在我的例子中,它应该是host.myName
。理想情况下,在每个服务中,我都会引用那些使用host.myName
而不是self.scope.myName
的服务。这可能吗?是的,“控制器as”是最好的方式。在这种情况下,您只需将use
方法更改为self.use=scope=>host=scope.host
,并在开始时声明let host={}
,哇,这确实有效-我很惊讶。你是个天才。我希望我能再次接受这个答案-非常感谢!这似乎非常有用-有没有一种方法可以让我添加,比如说,父控制器的4个子控制器,而不必将每个子控制器嵌套在其他未使用的div的matryoshka中?如果我这样做了,对于嵌套更深的控制器,我是否需要使用$scope.$scope.vm.value等等?我已经做了一个基于服务的替代方案,检查它是否解决了您的问题;)我设法让它工作起来了!不过,最后一个问题是——控制器中的变量写为$scope.myName
——我更喜欢使用“controller as”语法,因此在我的例子中,它应该是host.myName
。理想情况下,在每个服务中,我都会引用那些使用host.myName
而不是self.scope.myName
的服务。这可能吗?是的,“控制器as”是最好的方式。在这种情况下,您只需更改