2

ステート マシンを統合してルーティングを制御するのを手伝ってくれる人はいますか?

これを行うための最良の方法は何ですか? サービスを作成しますか?

基本的に、すべての $location リクエストをインターセプトし、ステート マシンを実行して、次の $location.path がどうあるべきかを判断させる必要があります。

問題は、時間の経過とともに追加および削除される一連の質問のように考えてください。ユーザーは時々訪問し、ユーザーの回答オブジェクトをステートマシンに渡し、ステートマシンはどの質問をロードするかを判断します。これは私の疑似コードですが、すべてのルート要求がマシンを通過することを確認するために、これをどこに配置するか、どのイベントにフックできるかを理解する必要があります。特定の stateMachine コントローラーが必要ですか? サービスを作成しますか? サービスはどこで利用できますか? $locationProvider をオーバーライドする必要がありますか?

$scope.user.answers = [{

id: 32,
answer: "whatever"

},
{

id:33,
answer: "another answer"

}]

$scope.questions = [{

id:32, 
question:"what is your name?", 
path:"/question/1"

},{

id:34, 
question:"how old are you?", 
path:"/question/2"

}]

var questions = $scope.questions;

angular.forEach(questions, function(question) {

if(question.id !exist in $scope.user.answers.id) {

$location.path = question.path
break;

});

ありがとう

4

2 に答える 2

7

このプロジェクトをもう調べましたか?

https://github.com/angular-ui/ui-router

私はそれを試し始めたばかりですが、あなたのニーズを満たすはずです.

于 2013-03-18T02:45:30.080 に答える
2

$location の変更を傍受する代わりに、 ng-click とng-includeを使用するのはどうですか? ng-click を使用してステート マシン ロジックを呼び出し、ng-include を介してロードするテンプレートを指定するモデル/スコープ プロパティを更新します。

<a ng-click="runStateMachine()">process answers</a>
<div ng-include src="partialToInclude"></div>

コントローラ:

$scope.runStateMachine() {
    ... process $scope.answers and set $scope.partialToInclude  ...
}
于 2012-12-30T04:35:11.533 に答える