2016-05-01 13 views
1

私は、バックエンドのRuby on RailsとフロントエンドのAngularJSを使用する単純なアプリケーションを持っています。 application.html.erbファイルでは、ng-includeとそのコントローラを含むdiv要素を置いています。これはnav.htmlファイルに固定されたトップナビゲーションバーを含んでいます。それはそうのような降伏関数です後:ブラウザで戻るボタンを押した後にng-includeとng-controllerを含むdiv要素が消える

<!DOCTYPE html> 
<html> 
<head> 
    <title>RailsAngularAuthenticationProject</title> 
    <base href="/"> 
    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
</head> 
<body ng-app="angular-auth-app"> 
    <div ng-include="'settingAngular/nav/nav.html'" ng-controller="NavCtrl"></div> 
    <div class="" ng-controller="MainCtrl"> 
    <ui-view><%= yield %></ui-view> 
    </div> 

</body> 
</html> 

ホームページには次のものが含まれます。

<div class="panel panel-default"> 
    <div class="panel-heading">Sign in via email</div> 
    <div class="panel-body"> 

    <label>user signed in?</label> 
    <p>{{ user.signedIn ? "true" : "false" }}</p> 
    <label>user email</label> 
    <p>{{ user.email || "n/a" }}</p> 

    <!-- sign out button --> 
    <button class="btn btn-default" ng-click="signOut()" ng-if="user.signedIn">Sign out</button> 

    <a ui-sref="posts.show">posts</a> 

    </div> 
</div> 

私はアンカータグ「投稿」をクリックすると、これはlocalhostを、別のページに私を取るだろう:3000 /ポスト。その時点まではすべて問題ありませんが、戻るボタンを押してホームページに戻ると、修正のトップナビゲーションバーが消え、アンカータグが応答しなくなり、プレースホルダが機能しなくなります。

私はAngularJSの新機能ですから、何が起こっているのか分かりません。角型app.jsで、多分レールではないと思っています。ここに私のapp.jsです

angular.module('angular-auth-app', [ 
    'ui.router', 
    'ui.bootstrap', 
    'ngRoute', 
    'ngResource', 
    'templates', 
    'ng-token-auth', 
    'ngAnimate', 
    'ngCookies',]) 
    .constant('baseUrl', 'http://localhost:3000') 
    .config([ 
    'baseUrl', 
    '$stateProvider', 
    '$routeProvider', 
    '$authProvider', 
    '$locationProvider', 
    '$urlRouterProvider', 
    function(baseUrl, $stateProvider, $routeProvider, $authProvider, $locationProvider, $urlRouterProvider){ 
     $locationProvider.html5Mode(true); //this removes the # on the url, add the base to application 

     $authProvider.configure({ 
      apiUrl: baseUrl + '/api', 

      handleLoginResponse: function(response) { 
      return response; 
      }, 

      // handleAccountUpdateResponse: function(response) { 
      // return response; 
      // }, 

      handleTokenValidationResponse: function(response) { 
      return response; 
      } 
     }); 


     $stateProvider 
     .state('home', { 
      url: '/', 
      controller: 'MainCtrl', 
     }) 
     .state('posts',{ 
      templateUrl: 'settingAngular/posts/postLayout.html', 
     }) 
     .state('posts.show',{ 
      url: '/posts', 
      views: { 
      postView: { 
       templateUrl: 'settingAngular/posts/post.html', 
       controller: 'PostCtrl' 
      } 
      } 
     }); 

     $urlRouterProvider.otherwise('/'); 

     }]); 

レールとAngularJsを使用してアプリケーションを構築する方法を学ぼうとしています。おかげさまで、ありがとうございます。

答えて

0

[OK]を、私は私はこのような$urlRouterProvider$stateProvider次のコードを設定している場合、この問題を回避する方法を発見:

$urlRouterProvider.otherwise('/home'); 

     $stateProvider 
     .state('home', { 
      url: '/home', 
      controller: 'MainCtrl', 
     }) 

私はもはやNGを失うことはありませナビゲーションバー、コントローラとプレースホルダが含まれます。私のURLは今からlocalhost:3000/homeになります。

私はまだ/ homeなしでホームページを設定したいと思います。もし 'home'を削除したら、urlrouterproviderとstateで、同じ問題に戻ります。

ソリューション:

が問題を見つけ、角度は、それがAgular UIルータ/ wを妨害されたレールのturbolinksだった、ちょうど良かったです。だからこのライン//require turbolinksをjavascriptフォルダ内のアプリケーションjsから削除してください。それは魅力的です。

また、URLに/homeを追加したとき、私は指摘したいと思います。上記のコードを参照してください。私は前に同じ問題に戻りました。