javascript - AngularJS - 我不明白为什么工厂总是未定义

标签 javascript angularjs web

我定义了一个发出 get 请求的工厂,但是当我将它注入(inject) Controller 时,它总是抛出一个未定义的错误。

这是工厂:

(function() {
    'use strict';

    var app = angular
        .module('myApp');

    app.factory('homeFactory', homeFactory);

    function homeFactory ($q, $http, $location) {
        var data = {};

        data.getProducts = getProducts;

        function getProducts() {
            return $http.get('http://localhost:8000/api/v1/products')
                .error(errorMessage);
        }

        function errorMessage(response) {
            console.log('There was an error', response);
        }

        return data;
    }

})();

这是 Controller :

(function() {
    'use strict';

    var app = angular
        .module('myApp');

    app.controller('homeController', homeController);

    homeController.$inject =[homeFactory];

    function homeController(homeFactory) {
        var home = this;
        homeFactory.getProducts()
            .success(success);

        function success(jsonData, statusCode) {
            console.log('The request was successful', statusCode);
            console.dir(jsonData);
            home.products = jsonData;
        }
    }
})();

看起来没问题,但是控制台抛出:

Uncaught ReferenceError: homeFactory is not defined

最佳答案

问题出在您的 DI 注释中。你应该只使用字符串

homeController.$inject = ['homeFactory'];

参见 https://docs.angularjs.org/guide/di#-inject-property-annotation

The $inject property is an array of service names to inject.

关于javascript - AngularJS - 我不明白为什么工厂总是未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34192861/

相关文章:

javascript - 如何跳过 setInterval 函数的第一次延迟?

javascript - 任何好的 firefox 跨浏览器网页兼容性测试插件?

javascript - Angular Google map 不显示

javascript - 不是 Angular js中的数字

apache - 有没有办法强制应用程序使用 https 而不是 http 发布

html - 如何让文字留在方框或某个区域? HTML CSS

javascript - X-可编辑:在 "click to edit"上停止传播

javascript - 在 Angularjs 中注入(inject)服务的正确方法是什么?

user-interface - QNAP Web UI - 如何在 Web 应用程序中获取窗口?

javascript - 如果执行了 onclick,如何禁用 HREF?