AngularJS函数到另一个文件

AngularJS函数到另一个文件,angularjs,Angularjs,我有一个AngularJS脚本(将在web上运行),一些特定的函数开始变得非常长,足够长,以至于我构建了一个电子表格来生成所有不同的cases,然后我简单地将它们粘贴到代码中 (function(){ var app = angular .module('app',[]) .controller('HostController',HostController); HostController.$inject = ['$scope']; f

我有一个AngularJS脚本(将在web上运行),一些特定的函数开始变得非常长,足够长,以至于我构建了一个电子表格来生成所有不同的
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”是最好的方式。在这种情况下,您只需更改