2017-01-30 18 views
0

私はui.routerを使用して角型アプリケーションの状態変化を検出しています。しかし、コントローラは負荷がかかりません。ui.router状態が正常に動作しない

以下は私のapp.jsコードです。私の状態がloginとき

var admin = angular.module('admin',['admin.core']); 
    angular.module('admin.core', ['ui.router', 'satellizer', 'ngMaterial']); 

    admin.config(function($mdThemingProvider, $stateProvider, 
          $urlRouterProvider, $authProvider, $locationProvider){ 
    $mdThemingProvider.theme('default').primaryPalette('light-blue', { 
     'default': '700', 
     'hue-1' : 'A200', 
    }).accentPalette('blue'); 

    // Satellizer configuration that specifies which API route the JWT should be retrieved from 
    $authProvider.loginUrl = '/api/authenticate'; 

    // Redirect to the auth state if any other states are requested other than users 
    $urlRouterProvider.otherwise('/admin/login'); 
    console.log($stateProvider) 
    $stateProvider 
     .state('login', { 
      url: '/admin/login', 
      name: 'login', 
      controller: 'AuthController as auth', 
     }) 
     .state('users', { 
      url: '/admin/users', 
      controller: 'UserController as user' 
     }); 
     $locationProvider.html5Mode(true); 
    }); 

    admin.controller('AuthController', AuthController); 

    function AuthController($auth, $state, $scope) { 
    console.log("Called"); 
    var vm = this; 

    vm.login = function() { 
     var credentials = { 
      email: vm.email, 
      password: vm.password 
     } 
     console.log(credentials); 
     // Use Satellizer's $auth service to login 
     $auth.login(credentials).then(function(data) { 
      // If login is successful, redirect to the users state 
      $state.go('users', {}); 
     }); 
    } 

    } 

AuthControllerは呼び出されません。

+0

なぜ「ユーザー」ではなく「ユーザー」ですか。名前を追加してください: 'users' –

+0

@PiotrPęczek..修正 – Gags

+0

あなたのルートアプリのHTMLのどこかに 'ui-view'がありますか? – devqon

答えて

1

$locationProvider.html5Mode(true);を使用する場合は、ベースhrefの場所を指定する必要があります。あなたの状態解決URLをhttp://localhost:8001/admin/#/loginとして解析し、問題を修正する必要があります。

メインインデックスファイルの<head />セクションに<base href="/" />を追加して、アプリケーションのベースパスを指定してください。

https://docs.angularjs.org/api/ng/provider/$locationProvider

また、メールのインデックスページに特定の要求をリダイレクトオールウェイズするようにサーバー上の.htaccessファイルを提供しています。あなたはかもしれませんあなたの構造に合うようにそれを微調整する必要があります。

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index.html$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.html [L] 
</IfModule> 

mod_rewriteのが私のApacheサーバ上で有効にする必要がありましたことに注意してください。 デフォルトでは無効になっています。

+0

私はadminにいるので、Base URLは ''でしょうか?そして、初めて初めて動作します。私が 'http:// localhost:8001/admin'にアクセスした場合、stateproviderは' http:// localhost:8001/admin/login'を作成します。コントローラは呼び出されません... – Gags

+0

これはあなたの最初の問題を解決しますか? 'F5' /ページリフレッシュに新たな問題が発生しましたか?正しい? –

+0

サーバに '.htaccess'を追加しましたか?上記の更新された回答をご覧ください。 –

関連する問題