【问题标题】:Using a AngularJS Factory in a Controller在控制器中使用 AngularJS 工厂
【发布时间】:2017-02-26 07:20:35
【问题描述】:

好的,所以我尝试创建一个工厂,它将调用我的 REST api 来检索数据。一切都很好,直到我更新到 Angular 1.6,这迫使我使用 Promises,所以我决定尝试工厂:

var registerApplication = angular.module('applications', ['ajoslin.promise-tracker']);

registerApplication.factory('HTTPFactory', ['$http', function dataService($http) {

    var applications = {};

        applications = function getApplications() { $http ({
                'url': '/adminapi/getApplications',
                'method': 'GET',
                'cache' : true
            }).then(function(response){
               // return response.data;
                console.log(response);
                return response;
            });
        }
    return applications;
}]);

registerApplication.controller("ApplicationController", ['HTTPFactory',     function ($scope, HTTPFactory) {

    $scope.applications = {};
    getApplications();

    // when landing on the page, get all applications and show them
    function getApplications() {
        HTTPFactory.getApplications().then(function(response){
            $scope.applications = response;
        });
    }
}]);

但是我收到了这个错误: angular.js:10859Error: undefined is not an object (evalating 'HTTPFactory.getApplications')

我尝试了几种方法,但似乎都给了我某种形式的错误,我做错了什么???

【问题讨论】:

    标签: javascript angularjs rest factory


    【解决方案1】:

    Factory 未正确注入。

    registerApplication.controller("ApplicationController", ['HTTPFactory', function ($scope, HTTPFactory) {
    

    应该是

    registerApplication.controller("ApplicationController", ['$scope', 'HTTPFactory', function ($scope, HTTPFactory) {
    

    此外,以下代码需要修复。

    applications = function getApplications() {
        // Logic
    }
    

    应该通过修复关闭问题并从工厂逻辑中删除 .then() 来替换。

    applications.getApplications = function() {
        return $http({
            'url': '/adminapi/getApplications',
            'method': 'GET',
            'cache': true
        });
    }
    

    【讨论】:

    • 修复了这个问题,但现在我得到错误:HTTPFactory.getApplications 不是一个函数。 (在 'HTTPFactory.getApplications()' 中,'HTTPFactory.getApplications' 未定义)这是我之前在进行一些更改之前遇到的错误。
    • @RudolphRedNose 请查看。
    • 谢谢你成功了!现在要弄清楚为什么我的用户界面没有更新......不过更近了一步。再次感谢。
    • 不客气。如果可以请点赞并选择答案。
    • HTTPFactory.getApplications().then(function(response){ $scope.applications = response; });请登录控制台并检查您是否得到正确的响应。
    【解决方案2】:

    先这样改厂

    registerApplication.factory('HTTPFactory', ['$http', function ($http) {
    
        var applications = {
              getApplications : getApplications
        };
    
            function getApplications() { 
                return $http ({
                    'url': '/adminapi/getApplications',
                    'method': 'GET',
                    'cache' : true
                })
            }
        return applications;
    }])
    

    您不必在工厂中编写承诺,只需将 http 请求返回给控制器并在其中捕获承诺。

    在控制器中将字符串范围添加到数组中

    registerApplication.controller("ApplicationController", ['$scope','HTTPFactory', function ($scope, HTTPFactory) {

    registerApplication.controller("ApplicationController", ['$scope','HTTPFactory',     function ($scope, HTTPFactory) {
    
        $scope.applications = {};
        getApplications();
    
        // when landing on the page, get all applications and show them
        function getApplications() {
            HTTPFactory.getApplications().then(function(response){
                $scope.applications = response;
            });
        }
    }])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多