簡體   English   中英

AngularJS更新控制器變量並再次渲染視圖?

[英]AngularJS update controller variable and render the view again?

我有一個結構非常簡單的網頁,想象一下左側導航欄,標題欄和內容區域。 如果我必須用代碼來描述它,它看起來像這樣

<body>
<aside ng-controller="SideNavCtrl">Left Nav data</aside>
<header ng-controller="HeaderCtrl">Page Title</header>
<section>
    <article ng-view>Page Content</article>
</section>

我正在使用ngRoute並左右更改路線。 我要從接受路由的控制器更新“頁面標題”。 我嘗試了數百種不同的方法,但是更改變量絕不會強制更新標頭數據。 這是控制器之間我最新的變量共享(不起作用)

app.controller("HeaderCtrl", ["$scope", "HeaderData", function($scope, HeaderData) {

        $scope.title = HeaderData.title();

    }]);

    app.factory("HeaderData", function() {

        var title = 'Default';

        return {
            title: function() { return title; },
            setTitle: function(newTitle) { title = newTitle; }
        }

    });

后來在路由控制器中,我像這樣

app.controller("PreviewBuildCtrl", ["$scope", "$routeParams", "$location", "BuildsAPIService", "HeaderData", function($scope, $routeParams, $location, BuildsAPIService, HeaderData) {

    $scope.build = BuildsAPIService.getBuildById($routeParams.buildId);

    HeaderData.setTitle("Previewing Build");

    console.log(HeaderData);

    if (!$scope.build) {
        $location.url('/builds/' + $routeParams.profession);
    }

}]);

問題是使用HeaderData.setTitle()不會更新標題內容。 我真的不想為此任務編寫jQuery代碼。 必須有一個更聰明,更棱角分明的方法來做到這一點。

我要做的就是將標題從頁面a移到頁面b時將標題更改為“頁面B”,而我認為添加面包屑插件對於手頭的任務來說是一個過大的殺手:(

您可以通過title = newTitle中斷數據綁定。 控制器指向舊title ,但是HeaderData不再指向它,因此丟失了。 您需要另一個點。

this.title = newTitle;

title方法當然也應該返回this.title

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM