javascript - 服务或工厂,以及如何使用 $http 到达那里

标签 javascript angularjs

将 $http 请求发送到服务和工厂的可接受方法是什么?到目前为止我发现的唯一方法感觉 Controller 中的代码太多了。我觉得服务和/或工厂应该完成所有繁重的工作,并且应该从那里返回数据,但如以下代码所示,我正在 Controller 内进行成功调用。

我不认为这是正确的做事方式,但这是迄今为止我发现的唯一可行的方式。

(在我的服务对象内)

this.monsterList = $http.get('data/monsters.json');

(在我的 Controller 内)

monsterService.monsterList.success(function(data) { fight.monsterList = data });

有没有办法在服务(或者可能是工厂)内获得完全成功的调用,以便我可以简单地在 Controller 中调用它?

monsterService.monsterList

monsterService.getMonsterList()

最佳答案

有很多方法可以做到这一点,我们可以争论哪些方法更好,但对于服务我通常会这样做:

return {
    monsterList: [],
    fetchMonsters: function () {
        return $http.get("data/monsters.json").success(function (data) {
            this.monsters = data.monsters;
        }.bind(this));
    }
}

然后在 Controller 中你可以这样做

monsterService.fetchMonsters();
// data bind monsterService.monsterList

由于您返回$http,如果需要,您还可以在 Controller 中链接.success(或.error)回调。

关于javascript - 服务或工厂,以及如何使用 $http 到达那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25795812/

相关文章:

css - 无法让 Angular 动画工作

javascript - react 不变违规=>不一致

javascript - 使用 jQuery addClass 更改背景图像

javascript - 如何以 ECMAScript 2015 方式正确导入带有 Backbone-boilerplate 的 HighCharts?

javascript - 箭头函数不适用于 onClick 事件处理程序

javascript - Angular Controller $scope.fId 显示未定义的值

javascript - 使用 jQuery 更改展示图像源仅适用于 Chrome

angularjs - 错误: key $$hashKey must not start with '$' (AngularJS)

angularjs - 如何编写 karma/jasmine 集成测试,将值按顺序传递到下一个测试?

angularjs - 我需要什么来包含那个 Angular Bootstrap 才可以工作