AngularJS在不同的控制器方法上更新服务变量

时间:2014-11-22 15:30:54

标签: javascript angularjs

刚开始使用AngularJS的第一个应用程序,我遇到服务变量问题。 HTML:

<html ng-controller="MainCtrl as main">
    <head>
        <title>{{ page.title() }}</title>
        ...
    </head>
<body>
    <header>{{page.title()}}</header>
    <main ng-view></main>
    <footer></footer>
</body>
</html>

*在每个视图中我使用ng-controller =“SomeCtrl”
MainCtrl:

APP.controller('MainCtrl', function($scope, page, uri){
    $scope.page = page;
    $scope.uri = uri;
});

ChatCtrl:

APP.controller('ChatCtrl', function($scope, page, uri){
    uri.setActivePath('chat');

    this.detailView = function(id){
        page.setPageTitle('Chat Controller - Detail view!!');
        $scope.chatID = id;
    }

    this.listView = function(){
        page.setPageTitle('Chat Controller - List view!!');
    }

    if(uri.segment(1)) this.detailView(uri.segment(1));
    else this.listView();

});

服务:

APP.factory('page', function(){
    var title = 'Hybrid Mobile Application';

    return{
        title: function(){ return title; },
        setPageTitle: function(pageTitle){ title = pageTitle; }
    }
});

uri.segment(1) - 获取第二个网址段,例如:for / chat / 235,将显示235.
ChatCtrl用于“/ chat”和“/ chat /:chatid”链接,在每个视图中我都显示page.title()。因此,当我调用page.setPageTitle('something')时,它会更新header和main容器中的文本。

问题:当我从listView点击类似“/ chat / 29442”的链接时,detailView方法不会更新page.title(),并且$ scope.chatID在此视图中也是空的。如果我重新加载页面,它只会更新这些值。

我怎样才能让它发挥作用?

1 个答案:

答案 0 :(得分:0)

我的&#39; uri&#39;服务从$ location返回网址路径,但在&#39; page&#39;服务,$ location没有核心更新,这就是我无法在page.title()和chatID中看到更改的原因。

解决方案:$ routeParams

我对这些服务一无所知,这就是为什么我自己创建一个获取url路径的原因。现在我使用if($routeParams.chatID) call detailView method,一切正常!