次のようなプロジェクト データの「モデル」* を作成しました。
angular.module('myapp').factory("projectModel", function ($resource) {
return $resource(
"/api/projects/:id",
{ id: "@id" },
{
"update": { method: "PUT" }
}
);
});
ルーティングで使用する wait-until-everything-has-loaded-before-displaying-anything 動作は必要ありません。代わりに、準備ができたら UI とデータをポップアップさせて喜んでいます。resolve
$scope
コントローラーにプロジェクト データがあればいいのですが、 dataではなくpromiseprojectModel
を返すため、次のようにする必要があります。
angular.module('myapp').controller('EditorCtrl', function ($scope, projectModel) {
projectModel.get({}, { 'id': session.projectId },
function (successResponse) {
// success callback
$scope.project = successResponse;
},
function (errorResponse) {
// failure callback
console.log(errorResponse);
}
);
データはディレクティブでレンダリングされますが、ディレクティブのlink
メソッド$scope.project
が設定される前に実行されるため、時間内にレンダリングするデータがありません。projectModel
ディレクティブへの依存関係として含めることもできますが、それは汚いと感じます。
ディレクティブがプロジェクト データにアクセスできるようにする正しい方法は何ですか?
*おまけの質問: から$resource
派生したサービスを MVC モデルと見なすべきですか、それともわかりにくいですか? はいの場合、ヘルパーメソッドなどでモデルを拡張する最良の方法は何ですか?