0

考慮以下代碼:

bank.config(function($stateProvider) { 
    $stateProvider 
    .state('main.bank', { 
     url: '/', 
     controller: 'BankCtrl', 
     resolve: { 
     money: function(bankResource) { 
      return bankResource.getMoney(); 
     }, 
     templateUrl: 'bank/bank.html' 
    }); 
}); 

在上面,我曾經呈現決心完成執行bank.html模板。

我想要渲染一個特定的模板,具體取決於從我的money函數返回的內容。

例子:

如果money回報的項目對象,使bank.html

如果money返回一個空對象,然後返回empty-bank.html

如何將我的$ stateProvider內實現這一目標?或者它會更有意義的是它在一個指令?

回答

1

移動你的resolve代碼父控制器,創建兩個子路由一個爲每個bank.htmlempty-bank.html和路由基於決心的結果,這樣的事情 -

.state('main', { 
    url: '/', 
    controller: 'MainCtrl', 
    resolve: { 
    money: function(bankResource) { 
     return bankResource.getMoney(); 
    } 
}) 
.state('main.bank', { 
    url: '/blank', 
    controller: 'BankCtrl', 
    templateUrl: 'bank/bank.html' 
}) 
.state('main.emptybank', { 
    url: '/emptyblank', 
    controller: 'EmptyBankCtrl', 
    templateUrl: 'bank/empty-bank.html' 
}); 

注入決心的結果到您的控制器並根據輸出更改狀態。

+0

如果我刷新頁面,這種解決方案不再有效。在控制器中更改狀態似乎不起作用,因爲控制器只實例化一次。當我刷新頁面時,控制器不會再被調用,因此不會調用「更改狀態」邏輯,並且視圖變爲空白。 – stecd 2015-04-03 20:21:10

+0

如果刷新頁面,則始終首先調用父控制器,並重新執行解析代碼。 – Sam 2015-04-04 10:45:33

1

在主狀態的index.html中,根據貨幣變量切換視圖。 EA:

.state('main', { 
    url: '/', 
    controller: 'MainCtrl' 
}) 

在你MainCtrl設置變量根據你的函數的輸出:

$scope.money = "bank" 

$scope.money = "emptybank" 
在您的index.html通話

然後一個觀點:

您的路由器:
.state('main.bank', { 
    url: '/bank', 
    views: { 
    bank: { 
    controller: 'BankCtrl', 
    templateUrl: 'bank/bank.html' 
    }, 
    emptybank: { 
    controller: 'EmptyBankCtrl', 
    templateUrl: 'bank/emptybank.html' 
    } 
    } 
}) 

對不起,任何語法錯誤。從頭部輸入我的手機。

但是這應該解決您的問題,並在進度使其更加「Angularesque」 :-)