如何在angularjs中显示另一个控制器的值?

时间:2016-03-31 06:52:26

标签: angularjs

我有两个模块,即Authentication和Home,它们有自己的控制器。它们中有相同的名称controller.js

我必须在主页(模块Home)中显示类似于$ scope.username的值,它来自模块认证的控制器。如何可能?

2 个答案:

答案 0 :(得分:2)

有很多方法。我希望您在那里制作app.factory('dataFactory' , func(){..})get/set数据,并在整个应用中检索您在任何模块中的价值。

app.factory('testFactory', function(){
        var _name = '';
    return {
        getName: function(text){
            return _name;
        },
        setName: function(name){
            _name = name;
        }  
    }               
});

工作Fiddle

希望它有所帮助。

答案 1 :(得分:0)

您可以使用共享服务,它将返回您的值,并且您的控制器将该服务作为依赖项注入。

e.g。

angular.module( 'yourApp' )
    .value("username", "Jon")
    .controller("index", ["$scope", "username", function($scope, username) {
      $scope.username = username;
    }]);

或使用工厂配方:

angular.module( 'yourApp' )
    .factory("username", function(){
       var value = 'John';
       return {
         get: function(){
            return value;
         },
         set: function(newName){
           value = newName;
         }
       }
    })
    .controller("index", ["$scope", "username", function($scope, username) {
      $scope.username = username.get();
    }]);

如果此值是动态的,您可以将值保存为对象并返回参考,那么您不需要使用手动创建的手表来查看值是否已更改:

angular.module( 'yourApp' )
    .factory("username", function(){
       var username = {
          value: 'John'
       };
       return {
         get: function(){
            return username;
         },
         set: function(newName){
           username.value = newName;
         }
       }
    })
    .controller("index", ["$scope", "username", function($scope, username) {
      $scope.usernameObj = username.get();
    }]);

并在视野中:

   {{usernameObj.value}}

你也可以通过在父范围内保存值来使用$scope的原型继承来做到这一点。