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

AngularJS update service variable on diff controller's methods

本文关键字:更新 服务 变量 方法 diff 控制器 AngularJS      更新时间:2023-09-26

刚刚用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"
主控制:

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

聊天控制:

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) - 获取第二个 url 段,例如:对于/chat/235,将显示 235。
ChatCtrl 用于"/chat"和"/chat/:chatid"链接,在每个视图中我都显示 page.title()。因此,当我调用 page.setPageTitle('something') 时,它会更新标头和主容器中的文本。

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

我怎样才能让它工作?

我的"uri"服务从$location返回网址路径,但与"页面"服务一样,$location没有直接更新,这就是为什么我看不到page.title()和chatID的变化。

解决方案:$routeParams

我不知道这项服务,这就是为什么我自己创建了一个来获取网址路径。现在我正在使用if($routeParams.chatID) call detailView method一切正常!