使用基于资源的数据模型与控制器和指令

时间:2014-02-12 20:58:19

标签: javascript angularjs ngresource

我为我的项目数据创建了一个"模型" *,如下所示:

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 behavior using resolve in the routing,而是我很乐意在用户准备就绪时弹出用户界面和数据。

将项目数据放在我的控制器中的$scope上会很高兴,但由于projectModel会返回承诺,而不是数据,我需要做类似的事情:

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模型,还是令人困惑?如果是,那么使用辅助方法扩展模型的最佳方法是什么?

1 个答案:

答案 0 :(得分: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