如何将动态数据从一个模块控制器传递到另一个模块控制器

时间:2014-10-08 14:08:24

标签: angularjs

我是AngularJS的新手,我想将动态值(用户名)从一个模块中的一个控制器传递到另一个模块中的另一个控制器。路由和其他事情都很好。 这是我的代码

loginModule.js

(function() {

      var app = angular.module("waleteros", ["ngRoute","ui.bootstrap","ngCookies"]);

        app.config(function($routeProvider) {
            $routeProvider
            .when("/",{
                templateUrl:"views/login.html",
                controller:"LoginCtrl"
            })
        }
    })

app.js

(function() {

      var app = angular.module("waleterosAdmin", ["ngRoute","ngGrid","ui.bootstrap","ngCookies"]);

      app.config(function($routeProvider) {
        $routeProvider
            .when("/home",{
                templateUrl:"homepage.html",
                controller:"HomeCtrl"
            })
        }
    })

loginCtrl.js

(function(){

        var app = angular.module("waleteros");

        var LoginCtrl= function($scope,$location)
        {
            $scope.signIn=function(email,pin)
            {
               //Some authentication code...
               //Here i want to pass the username to homectrl.js
               window.location.href="views/home.html"
            }
        }
        app.controller("LoginCtrl", LoginCtrl);
    })

HomeCtrl.js

 (function(){

        var app = angular.module("waleterosAdmin");

        var HomeCtrl=function($scope)
        {
             //Here i want to get the username
        }

        app.controller("HomeCtrl", HomeCtrl);
    })

3 个答案:

答案 0 :(得分:0)

你可以在模块之间共享服务,从而在模块之间传递价值, 请看这里Share a single service between multiple angular.js apps,以及sharing between modules with AngularJS?

答案 1 :(得分:0)

您将使用服务来保存数据,然后将服务注入您的控制器:

app.service("SharedProperties", function () {
    var _userName = null;

    return {
        getUser: function () {
            return _userName
        },

        setUser: function(user) {
            _userName = user;
        }
    }
});

现在注入SharedProperties并使用getter / setter

var LoginCtrl= function($scope,$location, SharedProperties)
    {
        $scope.signIn=function(email,pin)
        {
           //Some authentication code...

           SharedProperties.setUser(user);
           //Here i want to pass the username to homectrl.js
           window.location.href="views/home.html"
        }
    }

var app = angular.module("waleterosAdmin");

    var HomeCtrl=function($scope, SharedProperties)
    {
         //Here i want to get the username
         var user = SharedProperties.getUser();
    }

答案 2 :(得分:0)

关于服务的一个警告是它们在应用程序的生命周期中持续存在,即它们仅被实例化一次。我遇到过各种情况,特别是在实施路由之后,我想要从服务中删除数据以节省空间并用新数据替换它(你不想每次看时都继续添加这项服务在另一种观点)。要做到这一点,你可以写一个" wipe"您调用以清除路由上的服务更改的方法,或将数据粘贴到指令(在其控制器上),将控制器放入它们自己的指令中,并使这些指令需要第一个指令,以便可以从一旦声明了DOM元素,就会被擦除的额外好处是(例如,在视图更改时)。