2016-10-02 170 views
2

我想創建一個只有一個作業的抽象父狀態:通過ajax服務器調用解析當前用戶,然後將此對象傳遞給子狀態。問題是子狀態永遠不會被加載。請看看這個plunker:ExampleAngular UI路由器解析繼承

一個state

angular.module('test', ['ui.router']) 
    .config(function($stateProvider, $urlRouterProvider){ 

    // Parent route 
    $stateProvider.state('main', { 
     abstract:true, 
     resolve: { 
     user: function(UserService){ 
      return UserService.getUser(); 
     } 
     } 
    }); 

    // Child route 
    $stateProvider.state('home', { 
     parent: 'main', 
     url: '/', 
     controller: 'HomeController', 
     controllerAs: '$ctrl', 
     template: '<h1>{{$ctrl.user.name}}</h1>' 
    }); 

    $urlRouterProvider.otherwise('/'); 
    }); 

一個factory

angular.module('test').factory('UserService', function($q){ 
    function getUser() { 
    var deferred = $q.defer(); 

    // Immediately resolve it 
    deferred.resolve({ 
     name: 'Anonymous' 
    }); 

    return deferred.promise; 
    } 

    return { 
    getUser: getUser 
    }; 
}); 

一個controller

angular.module('test').controller('HomeController', function(user){ 
    this.user = user; 
}); 

在這個例子中,home國家將NEV呃顯示模板,我不明白爲什麼。如果我刪除了parent: 'main'行,那麼它將顯示該模板,但當然,我得到一個錯誤,因爲它找不到HomeController中的user依賴項。

我錯過了什麼?我做了像ui-router的文檔中描述的一切,我認爲這應該起作用。

回答

2

每個家長都必須在模板目標UI視其子

$stateProvider.state('main', { 
    abstract:true, 
    resolve: { 
    user: function(UserService){ 
     return UserService.getUser(); 
    } 
    } 
    template: '<div ui-view=""></div>' 
}); 

注:另一種選擇是使用絕對名稱和目標的index.html ..但在這種情況下,上述是要走的路(Angularjs ui-router not reaching child controller