Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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_Onsen Ui - Fatal编程技术网

Javascript 从AngularJS中另一个文件中的控制器访问服务

Javascript 从AngularJS中另一个文件中的控制器访问服务,javascript,angularjs,onsen-ui,Javascript,Angularjs,Onsen Ui,我有一个使用Onsen UI和AngularJS构建的跨平台企业应用程序 该应用程序发展很快,因此我决定将我的主app.js文件拆分为单独的文件。到目前为止,每个页面都有自己的控制器,所有控制器都在一个app.js文件中 我还有一个在我的app.js中定义的服务,在那里我存储用户名等值,以便在控制器之间共享。我需要在应用程序周期中存储这些,因为在用户交互结束时,所有页面上输入的所有值都会发送到服务器 我已成功地将控制器拆分为各自的文件,但很难将服务移动到自己的文件中,例如sharedProper

我有一个使用Onsen UI和AngularJS构建的跨平台企业应用程序

该应用程序发展很快,因此我决定将我的主app.js文件拆分为单独的文件。到目前为止,每个页面都有自己的控制器,所有控制器都在一个app.js文件中

我还有一个在我的app.js中定义的服务,在那里我存储用户名等值,以便在控制器之间共享。我需要在应用程序周期中存储这些,因为在用户交互结束时,所有页面上输入的所有值都会发送到服务器

我已成功地将控制器拆分为各自的文件,但很难将服务移动到自己的文件中,例如sharedProperties.js

我的“新”app.js(缩写)如下所示:

// Create the module that deals with the controllers
var app = angular.module("myApp", ['onsen', 'loginController', 'registerController']);
// Get the main app.js module
var login = angular.module("loginController", []);
login.controller("LoginController", function($scope, $http)
{
    // Need to get and set values from/to sharedProperties here
});
然后,我在自己的文件中创建每个控制器,例如,login.js,如下所示:

// Create the module that deals with the controllers
var app = angular.module("myApp", ['onsen', 'loginController', 'registerController']);
// Get the main app.js module
var login = angular.module("loginController", []);
login.controller("LoginController", function($scope, $http)
{
    // Need to get and set values from/to sharedProperties here
});
然后在index.html中声明不同的.js文件,所有这些似乎都正常工作

我尝试在自己的文件中创建服务sharedProperties,例如sharedProperties.js,方式与下面相同,但这不起作用

// Get the main app.js module
var shared = angular.module("sharedProperties", []);
shared.service("SharedProperties", function()
{
    var username = "";   

    return {
        // Get and set the userName
        getUserName: function()
        {
            return userName;
        },
        setUserName: function(value)
        {
            userName = value;
        }
    }
});
我曾尝试将sharedProperties添加到我的模块中,但都不起作用。我已尝试将其添加到我的主应用程序中,如下所示:

// Create the module that deals with the controllers
var app = angular.module("myApp", ['onsen', 'sharedProperties', 'loginController', 'registerController']);
以及单个控制器的函数():

var login = angular.module("loginController", []);
login.controller("LoginController", function($scope, $http, sharedProperties)
{
    // Need to get and set values from/to sharedProperties here
});
但这两种方法都不管用。如何使新文件中的sharedProperties可供所有控制器使用

还有,我怎么称呼我的能手和二传手呢。当所有控制器和服务都在我的原始app.js文件中时,我会创建控制器,将sharedProperties添加到函数()中,然后调用我的getter和setter,例如

app.controller("LoginController", function($scope, $http, sharedProperties)
{
    sharedProperties.setUserName(someValue);
    sharedProperties.getUserName();
});

还是有更好的方法?正如我提到的,我必须将app.js文件拆分为单独的文件,因为该应用程序越来越大,越来越难以管理。由于我无法控制的原因,随着时间的推移,应用程序将变得更大。

您必须将模块“sharedProperties”注入到您希望使用它的模块中

通过这样做,它使模块了解“sharedProperties”中的所有内容。因此,您需要注入实际的服务,而不是将“sharedProperties”注入控制器和其他服务。像这样:

    var app = angular.module("myApp", ['onsen', 'sharedProperties', 'loginController', 'registerController']);


    var login = angular.module("loginController", []);
    login.controller("LoginController", function($scope, $http, SharedProperties)
    {
    // Need to get and set values from/to sharedProperties here
    });
从这里开始,调用绑定到该服务的任何函数都非常简单

SharedProperties.someFunction();
SharedProperties.someOtherFunction();
另一个注意事项:我建议长手注射

login.controller("loginController", ['$scope','$http', 'SharedProperties', function($scope, $http, SharedProperties){
    //code in here
}]);
这是为了如果你想缩小或丑化你的代码