2014-12-23 54 views
2

我在角度應用中使用角度ui路由器。對於路由部分,我已經寫了角度ui路由器加載視圖兩次

var routerApp = angular.module('routerApp', ['ui.router']); 

routerApp.config(function($stateProvider, $urlRouterProvider) { 

$urlRouterProvider.otherwise('/home'); 

$stateProvider 

    // HOME STATES AND NESTED VIEWS ======================================== 
    .state('home', { 
     url: '/home', 
     templateUrl: 'partial-home.html', 
      controller : function($scope,$state){ 
      $scope.$on('$viewContentLoaded', function(){ 
       console.log("home content loaded",$state.current); 
      }) 
      } 
    }) 

    // nested list with custom controller 
    .state('home.list', { 
     url: '/list', 
     template: 'I am using a list.' 
    }) 

    // nested list with just some random string data 
    .state('home.paragraph', { 
     url: '/paragraph', 
     template: 'I could sure use a drink right now.' 
    }) 

}); 

在部分home.html的我wriiten: -

<div class="jumbotron text-center"> 
    <h1>The Homey Page</h1> 
    <p>This page demonstrates <span class="text-danger">nested</span> views.</p> 

    <a ui-sref=".list" class="btn btn-primary">List</a> 
    <a ui-sref=".paragraph" class="btn btn-danger">Paragraph</a> 

</div> 

<div ui-view></div> 

當我執行這個應用程序在瀏覽器中,如果我打開了現在路線

/home 

瀏覽器控制檯顯示「歸屬的內容加載」一次,然後如果我點擊列表鏈接,地址欄變爲

/home/list 

然後控制檯也顯示一次。

但是,如果當時刷新瀏覽器選項卡(當路由是home/list時),控制檯會顯示兩次。請幫助我爲什麼會發生這種事情。

回答

1

因爲home.list一種家的孩子的狀態,當你重新加載home.list 頁它首先初始化視圖家居控制器比視圖列表控制器,這樣$ viewContentLoaded被調用兩次

我猜你使用家庭模板內的ui-view會導致孩子和父母共享相同的範圍。你正在傾聽孩子和家長的事件範圍。所以被稱爲兩次是很自然的

+0

由於列表是家庭的孩子,那麼它顯然會首先加載視圖,然後是視圖列表。但這裏的家庭觀點正在被加載兩次。我沒有添加任何控制檯列表viewContentLoaded。另一件事是,當我在/ home並點擊列表鏈接時,同樣的事情也會發生。但在那種情況下,它只顯示一個控制檯。 – Indra

+0

我想你使用ui-view在家庭模板中導致孩子和父母共享相同的範圍。你正在傾聽孩子和家長的事件範圍。所以被調用兩次是很自然的 – bahadir

+0

我也爲列表定義了一個控制器,所以它沒有得到相同的範圍。同樣的事情正在發生。 – Indra

1

這些是嵌套視圖。重新加載後控制檯中有兩條消息的原因是: 當您在/ home開始時,加載了本地狀態。當你去那裏的/ home/list時,只有home.list需要加載,因爲home狀態已經被加載。當你重新加載時,有兩個狀態需要加載:home和home.list。

編輯:我沒有足夠的聲譽,所以我不能評論。我想你使用ui-view在家庭模板中導致孩子和父母共享相同的範圍。你正在傾聽孩子和家長的事件範圍。所以被稱爲兩次是很自然的

+0

由於列表是家庭的孩子,那麼它顯然會首先加載視圖,然後再加載列表的視圖。但這裏的家庭觀點正在被加載兩次。我沒有添加任何控制檯列表viewContentLoaded。另一件事是,當我在/ home並點擊列表鏈接時,同樣的事情也會發生。但在那種情況下,它只顯示一個控制檯。 – Indra