簡體   English   中英

AngularJS - 應用程序架構

[英]AngularJS - app architecture

我正在構建我的第一個AngularJS應用程序。

我想在路由更改時動態更改頁面標題,所以我首先嘗試將我的應用程序結構化為:

<html ng-app>

我想要一個頁面級控制器,然后在它下面有子控制器。

所以,我開始:

var app = angular.module("squareUpYourSavings", ["page1", "page2", "..."]);

app.controller('GlobalController', ['$scope', '$rootScope', function GlobalController($scope, $rootScope) {

    $rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
        $rootScope.title = current.$$route.title;
    });

    $rootScope.$on("$locationChangeStart", function (event, nextLocation, currentLocation) {
            console.log('nextLocation :: ' + nextLocation);
            console.log('currentLocation :: ' + currentLocation);
        });

但這不起作用。 (不知道為什么)我有一個導航指向目錄級控制器和ng-view DOES工作,但<title>不會改變。 $ locationChange聽眾也根本沒有開火。 好像這個頂級控制器甚至根本沒有被聽到。

那么,我改變了<html>元素來指定頂級控制器:

<html id="ng-app" ng-controller="GlobalController">

這確實有效,但路線似乎是兩次射擊。 初始頁面加載顯示:

nextLocation :: location.html#/
currentLocation :: location.html#/ 

當我然后去一條路線時,它會正確地觸發之前和之后,但是當我到達那里時會再次點火:

nextLocation :: location.html#savings-video         // expected
currentLocation :: location.html#/                  // expected
nextLocation :: location.html#/savings-video/       // not expected
currentLocation :: location.html#savings-video      // not expected

這是預期的行為嗎? 我究竟做錯了什么?

謝謝,斯科特

對於與整個應用程序相關的全局內容而不是某個模塊 - 比如標題,我建議您將邏輯放在主控制器中run模塊方法:

var app = angular.module("squareUpYourSavings", ["page1", "page2", "..."]);
app.run(function($rootScope) {
     $rootScope.$on('$routeChangeSuccess', function (event, current, previous) {
         $rootScope.title = current.$$route.title;
     });
});

哦,你應該離開你的路由器來決定哪個控制器處於“ 控制 ”狀態:

<html ng-app> 

暫無
暫無

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

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