219

我如何使用$rootScope将变量存储在我想稍后在另一个控制器中访问的控制器中?例如:

angular.module('myApp').controller('myCtrl', function($scope) {
  var a = //something in the scope
  //put it in the root scope
});

angular.module('myApp').controller('myCtrl2', function($scope) {
  var b = //get var a from root scope somehow
  //use var b
});

我该怎么做?

4

8 回答 8

251

在根范围设置的变量可通过原型继承在控制器范围内使用。

这是@Nitish 演示的修改版本,它更清楚地显示了关系:http: //jsfiddle.net/TmPk5/6/

请注意,rootScope 的变量是在模块初始化时设置的,然后每个继承的范围都有自己的副本,可以独立设置(change函数)。此外,rootScope 的值也可以更新(中的changeRs函数myCtrl2

angular.module('myApp', [])
.run(function($rootScope) {
    $rootScope.test = new Date();
})
.controller('myCtrl', function($scope, $rootScope) {
  $scope.change = function() {
        $scope.test = new Date();
    };

    $scope.getOrig = function() {
        return $rootScope.test;
    };
})
.controller('myCtrl2', function($scope, $rootScope) {
    $scope.change = function() {
        $scope.test = new Date();
    };

    $scope.changeRs = function() {
        $rootScope.test = new Date();
    };

    $scope.getOrig = function() {
        return $rootScope.test;
    };
});
于 2013-09-18T19:55:08.393 回答
161

在控制器之间共享数据是工厂/服务非常擅长的。简而言之,它的工作原理是这样的。

var app = angular.module('myApp', []);

app.factory('items', function() {
    var items = [];
    var itemsService = {};

    itemsService.add = function(item) {
        items.push(item);
    };
    itemsService.list = function() {
        return items;
    };

    return itemsService;
});

function Ctrl1($scope,items) {
    $scope.list = items.list; 
}

function Ctrl2($scope, items) {
    $scope.add = items.add;
}

您可以在这个小提琴中看到一个工作示例:http: //jsfiddle.net/mbielski/m8saa/

于 2013-09-18T20:52:28.927 回答
22
angular.module('myApp').controller('myCtrl', function($scope, $rootScope) {
   var a = //something in the scope
   //put it in the root scope
    $rootScope.test = "TEST";
 });

angular.module('myApp').controller('myCtrl2', function($scope, $rootScope) {
   var b = //get var a from root scope somehow
   //use var b

   $scope.value = $rootScope.test;
   alert($scope.value);

 //    var b = $rootScope.test;
 //  alert(b);
 });

演示

于 2013-09-18T19:39:22.673 回答
9

我没有理由这样做 $scope.value = $rootScope.test;

$scope 已经是从 $rootScope 继承的原型。

请看这个例子

var app = angular.module('app',[]).run(function($rootScope){
$rootScope.userName = "Rezaul Hasan";
});

现在你可以在 app 标签的任何地方绑定这个范围变量。

于 2015-07-02T05:57:54.910 回答
6

首先将 $rootScope 中的值存储为

.run(function($rootScope){
$rootScope.myData = {name : "nikhil"}
})

.controller('myCtrl', function($scope) {
var a ="Nikhilesh";
$scope.myData.name = a;
});

.controller('myCtrl2', function($scope) {
var b = $scope.myData.name;
)}

$rootScope 是所有 $scope 的父级,每个 $scope 都会收到 $rootScope 数据的副本,您可以使用 $scope 本身访问这些数据。

于 2016-05-01T03:50:52.187 回答
3

如果只是“在其他控制器中访问”,那么您可以为此使用角度常数,好处是;您可以添加一些全局设置或您想要在整个应用程序中访问的其他内容

app.constant(‘appGlobals’, {
    defaultTemplatePath: '/assets/html/template/',
    appName: 'My Awesome App'
});

然后像这样访问它:

app.controller(‘SomeController’, [‘appGlobals’, function SomeController(config) {
    console.log(appGlobals);
    console.log(‘default path’, appGlobals.defaultTemplatePath);
}]);

(没有测试)

更多信息:http: //ilikekillnerds.com/2014/11/constants-values-global-variables-in-angularjs-the-right-way/

于 2016-03-08T09:57:13.193 回答
2

http://astutejs.blogspot.in/2015/07/angularjs-what-is-rootscope.html

 app.controller('AppCtrl2', function ($scope, $rootScope) {
     $scope.msg = 'SCOPE';
     $rootScope.name = 'ROOT SCOPE';
 });
于 2015-07-17T01:58:20.523 回答
1

有多种方法可以实现这一目标:-

1.添加方法$rootScope_.run

.run(function ($rootScope) {
    $rootScope.name = "Peter";
});

// Controller
.controller('myController', function ($scope,$rootScope) {
    console.log("Name in rootscope ",$rootScope.name);
    OR
    console.log("Name in scope ",$scope.name);
});

2.创建一个服务并在两个控制器中访问它。

.factory('myFactory', function () {
     var object = {};

     object.users = ['John', 'James', 'Jake']; 

     return object;
})
// Controller A

.controller('ControllerA', function (myFactory) {
    console.log("In controller A ", myFactory);
})

// Controller B

.controller('ControllerB', function (myFactory) {
    console.log("In controller B ", myFactory);
})
于 2016-10-09T20:18:13.060 回答