【问题标题】:get $http service and call获取 $http 服务并调用
【发布时间】:2014-11-04 11:09:52
【问题描述】:

如何在 Angular js 中获取 $http 服务,然后在我的自定义 asyncAction 函数调用中对其调用 get 函数。不涉及 html(引导程序???)

编辑:可以放一些虚拟的 html 来让它触发控制器的东西

我在http://jsfiddle.net/smartdev101/bdmkvr6g/ 有一个 jsfiddle

    asyncAction: function(resultFunction, faultFunction) {

    $http.get("https://api.github.com/users/angular")
    .success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
        console.log(data);
    })
    .error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
    });
},

一些进展 - 更新了小提琴,添加了一些 html 标签以使其工作,但是

有人可以找到我的方法,而无需在我的代码中插入标记,甚至在没有这个ng-controller 标签的情况下触发AttendeeProxyController 自己?我更喜欢完全手动启动和控制器触发过程。

或者横向思考...我不需要这个控制器,它的存在是为了让我可以在没有 html 的情况下纯粹在 javascript 中访问 $http?

<span id="attendeeProxyController" ng-controller="AttndeeProxyController"></span>

【问题讨论】:

  • 您可能会考虑为您的问题添加更多上下文。我的假设是很多 Javascript 开发人员不熟悉 PureMVC。我曾经在 Actionscript 中使用 PureMVC,坦率地说,您似乎不需要在 AngularJS 应用程序中使用 PureMVC(除非您将 Angular 添加到现有的 PureMVC 应用程序)。在 AngularJS 中,您将 $http 之类的东西注入到您的 Angular 控制器、服务等中。(对我而言)不清楚的是 PureMVC 在 Javascript 中是如何工作的
  • 无论使用什么框架,它都必须通过手动引导和获取 $http 来做一些事情,它可能是像 Backbone 这样的框架,这是一个与框架无关的问题。
  • 很好的说明。我可能过火了,但我认为在您添加最新评论之前,您最初的问题并不是很清楚;)
  • 你知道一种方法可以帮助摆脱这个span html标签并手动触发控制器吗???

标签: javascript angularjs


【解决方案1】:

或者横向思考...我不需要这个控制器,它的存在是为了让我可以在没有 html 的情况下纯粹在 javascript 中访问 $http?

是的,虽然我不建议这样做

var $http = angular.injector(["ng"]).get("$http");
// use $http here

这将为您提供可以使用的 $http 的直接引用。然而,它违背了 Angular 的依赖注入方式,如果你不小心,它通常会产生更难测试和更难推理代码。

【讨论】:

  • 你是对的,但我有一个可管理的模块化架构,使用框架和库(如 Backbone 或 puremvc)围绕 Angular 构建。感谢@Benjamin 的回答,它有效:)
  • var $routeProvider = angular.injector(["ng"]).get("$routeProvider"); 可能得到这个???
【解决方案2】:

就像@Benjamin 所说,您可以使用调用来自动向您的函数注入依赖项。

var $injector = angular.injector(["ng"]);
$injector.invoke(function($http){
    $http.get("https://api.github.com/users/angular").success(function(data){
        console.log(data);
    }).error(function(data){
        console.log(data);
    });
});

Here is $injector document.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多