【问题标题】:I'm stuck in infinite loop with app.factory - AngularJS我陷入了 app.factory 的无限循环 - AngularJS
【发布时间】:2016-07-12 04:15:55
【问题描述】:

好的,所以我明白了为什么我会陷入循环。我只是不知道如何解决它。

我正在构建一个从第三方服务器获取 JSON 文件的小应用程序。该文件包含用户的信息。为了这个练习(我知道他们为什么这样做,但这让我很生气)我得到了一个指向 JSON 文件的链接。我终于发现,每次点击给我的链接都会提供不同的用户信息!

所以,我有以下内容:

app.factory('users', ['$http', function($http) { 
   return $http.get('link to file - can't give out actual link for proprietary reasons') 
}]);

但是当它去验证 .apply() 上的 JSON 时,它发生了变化,所以它再次获取它,等等。

我如何说服代码获得一次并对其感到满意?

【问题讨论】:

    标签: angularjs infinite-loop


    【解决方案1】:

    创建一个可以从指令/控制器调用的函数并返回它。

    app.factory('users', ['$http', function($http) {
       function callExternalJson() {
           return $http.get('link to file - can't give out actual link for proprietary reasons') 
       }
    
       return callExternalJson;
    }]);
    

    工厂供应商

    为我们提供函数的返回值,即您只需创建一个对象,为其添加属性,然后返回相同的对象。当您将此服务传递给您的控制器时,对象上的这些属性现在将通过您的控制器在该控制器中可用工厂。

    【讨论】:

    • 很高兴它对您有所帮助。干杯:)
    • 好的,等等,另一个问题。在我的控制器中,我有一个基于 users.success 的功能,但现在它告诉我不再存在。如何设置我的局部变量等于 JSON 的内容?
    • 希望你使用 Promise 调用工厂函数。
    • 我的称呼和我上面贴的完全一样。然后,在 HomeController 中,我像这样在顶部引用它: app.controller('HomeController', ['$scope', '$rootScope', 'users', function($scope, $rootScope, users ) {。是这样吗?错了吗?
    • users.callExternalJson() .success(function (studs) { $scope.students = studs; }) .error(function (error) { $scope.status = '无法加载客户数据: ' + error.message; }); } 像这样。
    猜你喜欢
    • 2015-11-20
    • 2020-05-13
    • 1970-01-01
    • 2013-03-17
    • 2021-02-15
    • 2022-01-23
    相关资源
    最近更新 更多