【问题标题】:Angular/Restangular, how to pass data to url like $routeParams with angular-resourceAngular/Restangular,如何使用 angular-resource 将数据传递给 url,如 $routeParams
【发布时间】:2015-10-11 02:54:52
【问题描述】:

我之前就 angular-resources 提出过这个问题,我得到了它的工作,但现在我已经开始使用 restangular。

我有一个从 storage/models.json 获取数据的视图 /models,我将其设置为与 restangular 一起正常工作。

现在我想要一个视图,例如 /models/:modelId,它可以从 storage/individual/:modelId.json 获取数据,其中 :modelId 是模型的相应 ID,显然,我在使用 restangular 进行设置时遇到了麻烦。我让它与 angular-resources 一起工作,但 restangular 有许多我将来会从中受益的功能,所以我决定进行切换。

有人能指出我正确的方向吗? GitHub 页面并没有真正谈论 routeParams,而且我找不到我想要实现的示例,尽管我可能忽略了它。

ModelsCtrl.js:

'use strict';

angular
    .module('swoleincApp')
    .controller('ModelsCtrl', ['ModelsService', '$scope', ModelsCtrl]);

function ModelsCtrl(ModelsService, $scope) {
    ModelsService
        .then(function(allModels) {
            $scope.models = allModels;
        });
}

ModelsService.js:

'use strict';

angular
    .module('swoleincApp')
    .factory('ModelsService', ['Restangular', ModelsService]);

function ModelsService(Restangular) {
    return Restangular
        .service('app/storage/models.json')
        .getList();
}

以上两个例子配合得很好,给了我想要的结果。

我正在尝试为第二条路线做类似的事情,但我得到了 404,因为在 url 中使用了“:modelId”而不是实际的模型 ID。

个人Ctrl.js:

'use strict';

angular
    .module('swoleincApp')
    .controller('IndividualCtrl', ['Individual', '$scope', IndividualCtrl]);

function IndividualCtrl(Individual, $scope) {
    Individual
        .then(function(individual) {
            $scope.model = individual;
        });
}

IndividualService.js:

'use strict';

angular
    .module('swoleincApp')
    .factory('Individual', ['Restangular', IndividualService]);

function IndividualService(Restangular) {
    return Restangular
        .one('storage/individual/:modelId.json')
        .get();
}

【问题讨论】:

    标签: angularjs restangular


    【解决方案1】:

    在你的服务改变

    Restangular
            .one('storage/individual/:modelId' + '.json')
            .get();
    

    Restangular
            .one('storage/individual/', actualModelId)
            .get();
    

    那么无论你在哪里配置你的模块,你都需要添加后缀:

    RestangularProvider.setRequestSuffix(".json");
    

    (来自 Restangular 文档) 如果您的所有请求都需要发送一些后缀才能工作,您可以在此处进行设置。例如,如果您需要发送 /users/123.json 之类的格式,您可以使用 setRequestSuffix 方法将该 .json 添加到后缀

    【讨论】:

    • 我试过这个,只是得到了错误。要么我执行不正确,要么你误解了。例如,/models 视图会加载所有模型。每个模型都有指向 /models/:modelId 的链接,其中 :modelId 是指向其 .json 文件的字符串。我希望当单击该链接时,/models/:modelId 视图会加载用于数据的 storage/individual/:modelId.json 文件。我使用 routeParams 使用 angular-resource 轻松设置了此设置,但找不到 restangular 的示例。
    【解决方案2】:

    解决了我的问题

    改变了这个:

    Restangular
            .one('storage/individual/:modelId' + '.json')
            .get();
    

    到这里:

    Restangular
            .one('storage/individual/', $route.current.params.modelId + '.json')
            .get();
    

    并将 $route 添加到控制器。

    【讨论】:

      猜你喜欢
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2017-11-21
      • 2016-08-18
      • 2021-01-23
      • 1970-01-01
      相关资源
      最近更新 更多