AngularJS:如何跨控制器共享数据?

时间:2016-05-31 02:55:15

标签: angularjs

我想动态获得标题。如何在indexCtrl中共享$ scope.title?

Main

3 个答案:

答案 0 :(得分:0)

尝试使用$rootScope.title

app.controller('indexCtrl', ['$rootScope','$scope',function($rootScope, $scope){
    $rootScope.$on("toindexCtrl", function (e) {
       $scope.$apply(function () {
          $scope.title = $rootScope.title;
      });
   });
}])

app.controller('secondCtrl', ['$rootScope','$scope', function($rootScope, $scope){
    $rootScope.title = 'UFC';
    $rootScope.$broadcast('toindexCtrl');
}])

此代码适合我。当值发生变化时,我也会使用$ broadcast来收听。

答案 1 :(得分:0)

我建议将它作为数据传递到路径定义中(如果你不知道的话,可以这样做)就像这样:

$stateProvider.state("page1", {
    url: "/page1",
    data: {
        title: "Your Title Here"
    },
    views: {
    }
}).state("page2", {
    url: "/page2",
    data: {
        title: "Your Other Title Here"
    },
    views: {

    }
})

然后,您可以在控制器中使用它,如下所示:

app.controller('indexCtrl', function($state){ //Note that you inject state
    $scope.pageTitle= $state.data.title;
}

希望这适合你

此致

答案 2 :(得分:0)

我们有一些方法可以做到这一点。 rootscope的属性可以处理这个与应用程序中的全局变量相同的属性。但我喜欢OOP,我认为我们应该在服务中封装数据处理。

服务守则:

app.factory('titleFactory',function(){
    var _title = null;
    return {
       setTitle: function(title) {
          this._title = title;
       },

       getTitle: function() {
            return this._title;
       }
  }
});

现在在任何控制器中你只需要注入并调用get或set title来处理你的数据。

设置标题值(对于secondCtrl相同):

app.controller('firstCtrl', function($scope,titleFactory){
      titleFactory.setTitle('OneFC');
})

现在所有其他控制器都可以访问标题:

app.controller('indexCtrl', function(){
     $scope.title = titleFactory.getTitle();
});