gpt4 book ai didi

AngularJS:直到页面加载后才知道提供者?

转载 作者:行者123 更新时间:2023-12-02 04:54:34 25 4
gpt4 key购买 nike

所以这真的很奇怪,也许它有一个我缺少的简单答案。以下代码给出了一个未知的提供者错误:

var foo = angular.module('foo', [ 'ngRoute', 'ngAnimate', 'ngCookies' ]);

foo.factory('fooApi', function ($scope, $http) {
var url = '/api/';

var factory = {};

factory.action = function (fields) {
fields.userid = $scope.userid;
fields.token = $scope.token;

console.log(JSON.stringify(fields));

return $http.post(url, { data: fields });
};

return factory;
})
.controller('loginController', function ($scope, fooApi) {
// do stuff

});

所有这些都一起加载到同一个文件中,我认为工厂首先会解析并且注入(inject)器能够在下面引用时找到它。但它给出了一个未知的提供者错误。

但是,如果我注释掉 Controller 并等待页面加载,然后在 Chrome JS 控制台中执行完全相同的 Controller 声明,它就可以正常工作。

有没有人遇到过这个并且知道如何处理?我无法在任何地方找到完全相同的问题。

最佳答案

就像@tasseKATT 所说的,您不能将$scope 注入(inject)服务,尤其是工厂。也许您的困惑是因为 $scope 可以注入(inject)到 Controller 中,所以您尝试注入(inject)到 factory 中。

有趣的是,您看到注入(inject)到 Controller 中的 $scope 不是服务 - 就像其他可注入(inject)的东西一样 - 而是一个 Scope 对象。

$scope 的主要目的是充当 View 和 Controller 之间的胶水之王,将 $scope 传递给服务没有多大意义。

这些服务只能访问 $rootScope 服务。

如果您需要始终将特定 Controller 的 $scope 传递给服务,您可以像服务中函数的参数一样传递它。不推荐这种方法,因为它开始打破 SoC 和单一职责原则,但也许适合你。

祝你好运:-)

关于AngularJS:直到页面加载后才知道提供者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24334244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com