2013-12-17 10 views
14

内では動作しません。私は、次のコードを持っているビューを持っていますhrefを使用してください。残念ながら、上記のコードは起動しません。

私はまた、このビューのコントローラで$状態を含めることを試みた:

app.controller('blogPostsController', function($scope, $stateParams, $http, $state) ... 

しかし、まだ何もありません。 transictionToも動作していないようです。

誰でもこの作品を作成する方法はありますか?

EDIT:

$scope.$state = $state; 

を私のコントローラ内:私はそれを割り当てることによって動作させることができます。これは醜いようです。本当にスコープに割り当てることなく$ stateにアクセスする他の方法はありませんか?

答えて

11

それはあなたがui-routerを使用している場合、そのことはできui-srefという属性がある

angular.module("myApp").run(function ($rootScope, $state, $stateParams) { 
    $rootScope.$state = $state; 
    $rootScope.$stateParams = $stateParams; 
}); 
+2

一般的には、$ rootScopeに、このようなプロパティを追加する悪い習慣と考えられています。 – jkjustjoshing

+3

本当にこのような状況が必要な場合(この状況は必要ありません - 私の答えを見てください)、より良い選択肢は、属性値をとり、依存関係の文脈で$解析する軽量な指令を作成することです。 – jkjustjoshing

43

により、すべてのスコープので、すべてのテンプレートで利用できるようになりますのでhttps://github.com/angular-ui/ui-router/wiki/Quick-Reference#note-about-using-state-within-a-templateによるとあなたは、$rootScopeに追加することができます私はそれを使用して、ボタンなどのリンクをスタイリングをお勧めします

<a ui-sref="blog.new-post"></a> 

(あなたはTwitterのブートストラップのようなCSSライブラリを使用している場合は簡単に行うことができます):次のように使用すること。その後、あなたのリンクを書くときにJavaScriptを使いこなす必要はありません。

あなたは状態にパラメータを渡す必要がある場合は、次の操作を行うことができます

$のscope.itemを使用すると、URLパラメータとして渡すことがしたいIDプロパティを持つオブジェクトです
<a ui-sref="blog.edit-post({id: item.id})"></a> 

+2

これは受け入れられた答えになるはずです。もちろん、このように状態にパラメータを渡すことはできません。 – RoyM

+3

@roymath、実際にすることができます!回答が編集されました。 – jkjustjoshing

+2

ありがとう - これは本当に素晴らしいことです。私が気づいたことの1つは、URLパスの一部を非常にエレガントに変更できることです。つまり、基本的に状態内をナビゲートすることです。 例:あなたがそうのような状態 'S'ためのURLを持っている:'/fooの/:AA /:BB /:cc' あなたは '/ fooの/ジョーのようなパスとその状態ですでにしている場合/ blow/rocks'を実行して、 'blow 'を' sixpack'に変更したいが、残りは残しておきたいのであれば、心配することなく 'ui-sref =" S({bb:' sixpack '})他のパラメータについて '$ location.path'を直接変更しようとすると、これはもっと難しくなります。 – RoyM

0

最も簡単な解決策は$ウィンドウサービスと古いアプローチ角度JSの

  1. を注入$ウィンドウサービスを使用することです。
  2. history.back() javascriptの機能を使用してください。
  3. 完了すると、戻ってほしい場合は最も簡単な解決策です。

私は角のJS全体を書いていません。重要のみコード:

HTML-コード

<button ng-click="$ctrl.goBack()">Go Back</button> 

JS-コード

self.goBack = function(){ $window.history.back(); };

関連する問題