2016-07-23 86 views
0

我有一個奇怪的問題,我使用ng-click$state.go()到一個狀態,並得到正確的網址,但錯誤的模板和控制器。Angular UI路由器錯誤的模板和控制器

這些都是我的狀態:

app.config(function($stateProvider, $urlRouterProvider){ 
     $urlRouterProvider.otherwise("/messages"); 
     $stateProvider.state('message', { 
     url: "/messages/:to/:fro/:messageID", 
     templateUrl: 'message.html', 
     controller: 'MessageCtrl' 
    }).state('compose', { 
     url: "/messages/compose/a/message", 
     templateUrl: 'compose.html', 
     controller: 'ComposeCtrl' 
    }); 
}); 

這是我的ng-click觸發的功能,我在事實上得到控制檯日誌,所以我知道正確的是射擊。

$scope.composeMe = function(){ 
    console.log("You want to compose a message!"); 
    $state.go("compose"); 
    }; 

當我火了該功能我得到的網址更改爲http://example.com/messages/compose/a/message但我得到templateUrlmessage狀態的controller

這是爲什麼?另一個狀態是從類似的(ng-click派生的)函數中觸發的,並且完美地工作。

回答

1

您嘗試去的URL與您實際要去的URL匹配。

ui-router如何知道「compose」不是你想要的字段,「a」是不是你想要的字段,「message」是不是你想要的messageID?

將更具體的狀態定義移動到具有URL參數的定義之上。

+0

有道理,我想我認爲它的工作原理是匹配狀態而不是urls,但我現在可以看到爲什麼這是錯誤的。 –