0

AngularJSアプリを作成しています。このアプリには、誰かが一連のオプションを選択する「画面」があります。これらのオプションの1つは、顧客リストをロードします。そして、その顧客リストに、顧客を作成するオプションがあります。

[Main Menu] (/) 
    -> [Options Select] (/options)
    -> [Customer Picker] (/options/customer)
    -> [Customer Create] (/options/customer/add)

つまり、基本的にCustomer Createはこの「状態」だけですか?UIを使用してナビゲートし、ページをリロードしてこのページからやり直す場合、Angularアプリケーション自体は、このページに到達した方法を「」と見なさないため、違いはありません。アイテムのスタック」。私が何かをポップしたViewControllerはありません。独立した、ルーティング可能な宛先がたくさんあります。

カスタマーピッカーコントローラーをインスタンス化してスタックにスローし、それに移行できると思っていましたが、ここでは機能しませんね。

たとえば、カスタマーアプリピッカーを「よりスマート」にしたい場合は、ルーターを介して渡された何らかのオプションを使用して、カスタマーピッカーに何を期待しているかを知らせる方法を考え出す必要があります。私が望むそれぞれの特定のユースケースに基づいて、わずかなバリエーションを作成します。

4

1 に答える 1

1

したがって、デフォルトでは、Angularにはこのようなものはほとんどありませんが、$localtionProviderまたは他のライブラリを使用することで、これを処理するさまざまな方法があります。

  • $locationProvider.path()ハッシュタグまたはHTML5(実際の)パスを提供するために使用できます
  • $locationProvider.search()状態を永続化するためにURLでオブジェクトを渡すために使用できます
  • Lawnchairのようなものを使用して、クライアントで利用可能な方法を使用して、クライアントのより複雑な状態を保存できます。

コントローラー/ビューも使用$routeProviderして切り替える場合は、異なるビュー間で単純なリンクを使用できます。これは、やや単純なコードで目的のタスクを実行するための方法かもしれません。

特にあなたがやろうとしていることに(私がそれを正しく理解していれば)、あなたは$locationProvider.search()あなたのスタック情報を保存するためにメソッドを使うことができます。このようなもの:

$scope.go = function (where) {
    var currentSearch = $location.search();
    currentSearch.viewStack.push(where);
    $location.search(currentSearch);
    $location.path(where);
}

ただし、使用する際の重要な注意点$locationProvider.search()は、複数レベルのオブジェクトを格納しないことです。つまり、その関数に渡すオブジェクトには、単純な型と配列以外のものを含めないでください。

このアプローチではviewStack、検索に入れる配列を解釈する何かをトップレベルのコントローラーに追加する必要があります。ここで人気のあるパターンは、アプリケーションのルートに長寿命のコントローラーが1つあり、その下に他の一時的なコントローラーがあるようです。スコープにもトップレベルのコントローラーを使用できますが、それはおそらく避けたいと思われる、やや曖昧な「グローバル」スコープに入ります。

角度の素晴らしいところは、使用するJSを制限できる量です。カスタム作成されたJSをあまり使用せず、Angularの作業方法に依存することができる場合はいつでも、長期的にはより良い結果が得られるようです。

于 2013-01-22T13:02:42.167 に答える