2015-03-31 40 views
4

在常規的angularjs ui-router狀態下,控制器在每次激活狀態時都會運行。在處理離子應用中的命名視圖時,我發現情況並非如此。命名的視圖控制器每個元素(遊戲)只運行一次。例如。用戶顯示一個遊戲 - >控制器運行。然後用戶轉到另一個狀態,並在返回時顯示相同的遊戲控制器不再運行 - 該視圖使用之前生成的範圍。我想用控制器重新初始化遊戲範圍。如何在每次啓動angularjs UI路由器命名的視圖時運行控制器?

我的代碼:

//app.js 
.state('app.game', { 
    url: "/x/{gameID:int}", 
    views: { 
    'menuContent': { 
     templateUrl: "templates/html/my-game.html", 
     controller: 'GameCtrl' 
    } 
    } 
}) 

...

//controllers.js 
controllers.controller('GameCtrl', function ($scope, $stateParams, Game) { 
    //alert("running controller"); 
    Game.get({id: $stateParams.gameID}, function(res){ 
    $scope.game = res; 
    }); 
}) 

編輯:其實,我用這個代碼去遊戲的觀點(目前GUID主意打從史蒂芬·韋克斯勒)

<ion-view view-title="Games"> 
    <ion-content> 
    <h1>Games</h1> 
    <ion-list> 
    <ion-item nav-clear menu-close href="#/app/x/{{game.id}}?guid= {{guid()}}" ng-repeat="game in games"> 
     {{game.id}} 
    </ion-item> 
    </ion-list>  
    </ion-content> 
</ion-view> 

回答

6
複製

我認爲你的問題已經被讀懂了Ÿ在這篇文章中解決了Angular/Ionic - controller only runs once brandyshea說,你需要添加要在$ionicView.enter事件

controller : function($scope, $cordovaSQLite){ 
    $scope.$on('$ionicView.enter', function() { 
     // code to run each time view is entered 
    }); 

    ... 
}); 
+0

這似乎是我正在尋找。我會盡快更新你的。 – user1167937 2015-03-31 14:11:02

+0

記得告訴我這是行得通的,如果你可以把這個答案標記爲有用的,請 – Matho 2015-03-31 14:13:33

+0

好的,所以其他的stackoverflow問題是關於這個問題(我的壞!)。你的答案似乎是正確的,但是對我來說最有效的方式是將'cache:false'添加到app.game狀態。從另一個問題鏈接到更多的文檔。謝謝你們。 – user1167937 2015-03-31 14:22:25

0

您可能正在導航到具有與之前加載的url和params相同的狀態。強制重新加載的一種方法是將guid作爲參數傳入您的狀態並設置reloadOnSearch=true(默認情況下爲true)。強制重新加載的第二種方法是使用版本0.2.5中添加的重新加載選項。

選項1

.state('app.game', { 
    url: "/x/{gameID:int}/{guid}", 
    views: { 
    'menuContent': { 
     templateUrl: "templates/html/my-game.html", 
     controller: 'GameCtrl' 
    } 
    } 
}) 

$state.go("app.game", { gameId: id, guid: guid }); 

function guid() { 
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
    var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8); 
    return v.toString(16); 
    }); 
} 

選項2(如果有版本> = 0.2.5)

.state('app.game', { 
    url: "/x/{gameID:int}", 
    views: { 
    'menuContent': { 
     templateUrl: "templates/html/my-game.html", 
     controller: 'GameCtrl' 
    } 
    }, 
    reload: true 
}) 

注:真棒GUID函數從Create GUID/UUID in JavaScript?

+0

對不起運行的代碼,我不能給予好評你引起我的小代表。我使用了更多的離子特定溶液,但這個質量似乎非常好。 Thx – user1167937 2015-03-31 14:26:08

相關問題