2016-08-17 5 views
0

私はユーザーが入力のIDを入力し、 "移動"ボタンを押す単純なページを持っています。私はonSubmit関数を使っていましたが、うまくいきました。それから、URLから/#/を削除するために有効になっているhtml5を含むようにAngularコードを変更しました。

search.template.html

<div class="row"> 
    <div class="small-12 column header-title"> 
     <h2>{{ svm.title }}</h2><h5>BETA</h5> 
    </div> 
</div> 

<form role="form" ng-submit="svm.onSubmit()"> 
<div class="row"> 

    <div class="small-12 small-centered columns"> 

     <div class="row collapse postfix-round"> 

      <div class="small-9 columns"> 
       <input ng-model="svm.formData.eventid" class="event-id" type="text" placeholder="Event ID" maxlength="7"> 
      </div> 
      <div class="small-3 columns"> 
       <button type="submit" class="button postfix event-submit">Go</button> 
      </div> 
      <div role="alert" ng-show="svm.formData.formError" class="alert alert-danger event-id-error">{{ svm.formData.formError }}</div> 

     </div> 

    </div> 

</div> 
</form> 

search.controller.js

(function() { 

    angular 
    .module('monitorApp') 
    .controller('searchCtrl', searchCtrl); 

    searchCtrl.$inject = ['$window']; 
    function searchCtrl($window) { 
     var vm = this; 
     vm.title = 'Monitor'; 

     vm.formData = {}; 
     vm.onSubmit = function() { 
      vm.formError = ''; 
      if (!vm.formData.eventid) { 
       vm.formData.formError = 'Please enter Event ID.'; 
       return false; 
      } else { 
       vm.formData.formError = ''; 
       $window.location.href = '/#event/' + vm.formData.eventid; 
       return false; 
      } 
     }; 
    } 

})(); 

だから、私はイベントを提出する際に使用するために使用するコントローラ$window.location.href = '/event/' + vm.formData.eventid;に表示される場合があります。今度は `html5Mode(true)の追加以来、それは壊れているだけではないようですが、それがうまくいけば、サーバー側のルーティングに私を送りますが、これは正しくありません。これは角度ルーティングを使用する必要があります。

私はこれを修正するだけでなく、Angularルーティング(サーバー側のルーティングではない)を適切に使用する方法を見つけようとしています。助けてくれてありがとう!

+0

は、代わりに[ '$のlocation'](https://docs.angularjs.org/api/ng/service/$location#path)サービスを使用します。それはHTML5モードを認識しています – Phil

+0

私の "app.js"では、私は 'function config($ routeProvider、$ locationProvider){...'と '$ locationProvider.html5Mode(true);'を使用しています。 – Kenny

+1

私はURLを変更するつもりです。つまり、 '$ location.path( '/ event/+ vm.formData.eventid)'です。より良いオプションはルータ – Phil

答えて

2

ではなく$locationサービスを使用します。

function searchCtrl($location) { 
    var vm = this; 
    vm.title = 'Monitor'; 

    vm.formData = {}; 
    vm.onSubmit = function() { 
     vm.formError = ''; 
     if (!vm.formData.eventid) { 
      vm.formData.formError = 'Please enter Event ID.'; 
      return false; 
     } else { 
      vm.formData.formError = ''; 
      $location.path('/event/' + vm.formData.eventid); 
      return false; 
     } 
    }; 
} 
+0

すごくうまくいって、何か新しいことを学んだ!ありがとう! – Kenny

関連する問題