【问题标题】:AngularJs console.log "$q is not defined"AngularJs console.log “$q 未定义”
【发布时间】:2014-04-18 06:04:06
【问题描述】:

我在控制台$q is not defined 中收到此错误。当我做一些研究时,我发现了一些类似.q library has been deprecated的东西来自 http://www.breezejs.com/documentation/breeze-labs/breezeangularqjs

如果是这样,那么整个 Promise 的概念也被弃用了,

【问题讨论】:

  • 您是否将 $q 注入到您正在工作的范围内?
  • 请考虑向我们更新进度并给我反馈:)

标签: angularjs breeze promise angular-promise


【解决方案1】:

Promise 不会被弃用。事实上,它们最近获得了相当大的动力,并包含在下一版本的 JavaScript 中。

让我们看看他们怎么说:

这个breeze.angular.q 库已被弃用。它被 Breeze Angular 服务所取代,后者更干净地为 Angular 开发配置了微风。

Breeze Angular 服务告诉 Breeze 使用 Angular 的 $q 进行承诺,并使用 Angular 的 $http 进行 ajax 调用。

他们说的是,Breeze 使用 Angular 自己的 Promise,而不是它自己的 breeze.angular.q,后者使用 Q Promise,它比 Angular 使用的 $q Promise 更强大但也更重。这只是一个 API 更改。

在 Angular 代码中,您可以使用依赖注入获得$q - 例如使用简单的语法:

myApp.controller("MyCtrl",function($q){
    //$q is available here
});

或者,如果您想独立使用它,您可以使用服务位置并直接从注入器获取$q,但这种情况很少见。 (如果你想要一个例子 - 让我知道,我宁愿不包含通常表明不良做法的代码)。

【讨论】:

  • 嘿,谢谢,起初我同意我对角度概念不太熟悉,所以在搜索承诺文件时,我发现techjini.com/blog/javascript-promises,这个文件是否正确,如果不纠正我。非常感谢兄弟
  • @RaviMone 如果您在 jsfiddle (jsfiddle.com) 或其他此类网站上创建一个简短示例,我可以查看并尝试了解您做错了什么。
【解决方案2】:
# in your console, try following code
$injector = angular.injector(['ng']);
q = $injector.get('$q');
deferred = q.defer();
# then do whatever you want

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2014-09-14
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2022-01-22
    • 2018-06-29
    相关资源
    最近更新 更多