2017-04-13 20 views
1

以下のデモでui-routerの親子状態を利用したいと思います。アプリケーションは正常に動作しているように見えますが(コンソールエラーはありません)、htmlはレンダリングされず、コントローラのinit関数も起動しません。このテクニックにはまったく新しいものがあり、構成に何が問題なのかはわかりません。抽象的な状態を取り除き、アプリケーションを正常に設定すると、「Hello World」というテキストが表示されます。ネストされた状態では、コントローラをHTMLまたは初期化しません。

Plunker

config.jsの

(function() { 
'use strict' 
var app = angular.module('app.core'); 
app.config(AppRouter); 
AppRouter.$inject = ['$stateProvider', '$urlRouterProvider']; 

function AppRouter($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/login'); 
    $stateProvider 
    .state('main', { 
     url: '', 
     abstract: true 
    }) 
    .state('main.login', { 
     url: '/login', 
     templateUrl: 'login.html', 
     controller: 'LoginController', 
     controllerAs: 'vm', 
    }); 
} 
})(); 

index.htmlを

<body ng-app="app"> 
<div ui-view=""></div> 
<script src="app.module.js"></script> 
<script src="app.route.js"></script> 
<script src="core.module.js"></script> 
<script src="config.js"></script> 
<script src="login.module.js"></script> 
<script src="login.controller.js"></script> 
</body> 

login.htmlと

<p>Hello World!</p> 

login.controller.js

(function() { 
    'use strict'; 

    var app = angular.module('app.login'); 

    app.controller('LoginController', LoginController); 

    LoginController.$inject = ['$location', '$filter', '$window', '$rootScope']; 

    function LoginController($location, $filter, $window, $rootScope) { 
     var init = function(){ 
      console.log('here'); 
     }; 

     init(); 
    } 
    })(); 

答えて

1

各ネストされた状態がにロードすることの親テンプレートで<ui-view>を必要とします。

.state('main', { 
     url: '', 
     abstract: true 
}) 

へ:

だけからあなたの抽象状態を変更

.state('main', { 
     url: '', 
     template:'<ui-view>', 
     abstract: true 
}) 

このテンプレートはもちろん、より高度なことができ、また、使用templateUrlは

+0

また、ネストされた状態がで読み込むことができます名前付きビューを使用した任意の「ui-view」 https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views – Ladmerc

関連する問題