我想动态获得标题。如何在indexCtrl中共享$ scope.title?
Main
答案 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();
});