0

次のようなプロジェクト データの「モデル」* を作成しました。

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 モデルと見なすべきですか、それともわかりにくいですか? はいの場合、ヘルパーメソッドなどでモデルを拡張する最良の方法は何ですか?

4

1 に答える 1

1
$scope.$watch('projectList', function (newVal, oldVal) {
                    if (newVal !== oldVal ) {
                    angular.forEach($scope.projectList, function (row) {
                          row.getName = function () {
                            return splitName(row.community_name);
                          };
                       });
                    }
                }, true);

はい、あなたはそうです、私は同様の問題を抱えていました.$scope.projectの変更を確認することでこれを行うことができ、その中にコードを入れることができます. $scope.projectList に値がある場合に ng-grid を動的に更新するには、上記の例を確認してください

于 2014-02-14T10:28:03.533 に答える