0

2つの質問があります:

  1. フォームがあります。ユーザーが保存ボタンを押すと、サーバーに対してput-requestが実行されます。応答には、新しいオブジェクトのIDが含まれています。次に、ルートをtest.com/objectからtest.com/object/1に変更します。私はすべての情報を持っているので、コントローラーを再度実行したくありません(サーバーからオブジェクトを再度ロードしますが、これは役に立ちません)。ショートバージョン:コントローラーをリロードせずにルートを変更するにはどうすればよいですか?これが不可能な場合、どちらが最善のアプローチですか?

  2. 私は2つのコントローラーを持っていますが、これらは非常によく似ています。良い例は、createObject-およびeditObject-Controllerです。ほぼすべての機能を共有したいのですが、コントローラー固有の方法がいくつか異なります。私はサービスが大好きですが、この場合、ロジックだけを共有したくないので、大きな利点はわかりません。イベントハンドラー自体の定義を共有したいと思います。短いバージョン:コントローラーの継承を作成する方法はどれですか?

答えと良いアイデアを楽しみにしています!どうもありがとう!

乾杯

4

2 に答える 2

2

ビュー (またはコントローラー) ではなくルートを変更する典型的な (組み込みの) Angular の方法は、 を介して URL の検索部分のみを変更すること$location.search('someSearchParam', searchParamValue)です。 これが正しく機能するには、 reloadOnSearchを に設定する必要があります。falseURL が変更されると、イベント$routeUpdateがブロードキャストされるため、コントローラーはこのイベントをリッスンして何かが変更されたことを知ることができます。AngularJS Paging with $location.path but no ngView reloadも参照してください

コントローラーの継承は、おそらく良い考えではありません。$scope プロパティ (例: $scope.editMode) で示されるように、1 つのコントローラーと ng-show/hide を使用して、ページの「作成」または「編集」バージョンを表示できます。

<div> 
  <span ng-show="editMode">Edit Object</span>
  <span ng-hide="editMode">Create Object</span>
</div>
<div>Name: <input type="text" ng-model="name"></div>
...
<div>
  <input type="submit" ng-show="editMode" ng-click="update()">Update
  <input type="submit" ng-show="editMode" ng-click="create()">Create
</div>

コントローラーの継承を試してみたい場合は、コントローラーではなくスコープが継承されることに注意してください。コントローラ スコープは、典型的には親スコープから継承します。このトピックの詳細については、AngularJS におけるスコープ プロトタイプ/プロトタイプ継承のニュアンスは何ですか? を参照してください。

于 2013-02-07T17:22:23.020 に答える
0

ありがとうマーク、あなたは私を大いに助けてくれました!

ルート変更の件はあまり納得いきませんが、今のところこれしかないと思います。私の意見では、コントローラーをリロードすることなく、パラメーターだけでなくルートも変更できるはずです。将来のリリースでそれが可能になることを願っています!

于 2013-02-07T21:09:38.957 に答える