javascript - 如何在 Angular 中添加服务以便 Controller 可以使用它?

标签 javascript angularjs cordova phonegap-plugins

我有一个基本的 Angular 设置。我想添加另一个工厂服务,以便 mainCtrl 可以使用它。

这是我的controller.js

angular.module('Manalator.controllers', [])
    .controller('MainCtrl', ['$scope', function ($scope, manaFactory) {
        manaFactory.testString();
    }]);

这是我的services.js

angular.module('Manalator.services', [])
    .factory('cordovaReady', [function () {
        return function (fn) {
            var queue = [],
                impl = function () {
                    queue.push([].slice.call(arguments));
                };

            document.addEventListener('deviceready', function () {
                queue.forEach(function (args) {
                    fn.apply(this, args);
                });
                impl = fn;
            }, false);

            return function () {
                return impl.apply(this, arguments);
            };
        };
    }])
    .factory('manaFactory', [function(){
        this.testString = function(){
          return 'This works';
        };
    }]);

这是我的routes.js

angular.module('Manalator', ['ngRoute', 'Manalator.services', 'Manalator.controllers'])
    .config(function ($routeProvider) {
        $routeProvider
            .when('/', {
                controller: 'MainCtrl',
                templateUrl: 'partials/pages/main.html'
            })
            .when('/devotion', {
                controller: 'MainCtrl',
                templateUrl: 'partials/pages/devotion.html'
            })
            .when('/results', {
                controller: 'MainCtrl',
                templateUrl: 'partials/pages/results.html'
            })
            .otherwise({redirectTo: '/'});
    });

我收到以下错误:

TypeError: Cannot read property 'testy' of undefined
    at new <anonymous> (controllers.js:3)
    at Object.i [as invoke] (main.min.js:1)
    at $get.f.instance (main.min.js:2)
    at m (main.min.js:1)
    at s (main.min.js:1)
    at $get.e (main.min.js:1)
    at main.min.js:1
    at p.$get.p.$eval (main.min.js:3)
    at p.$get.p.$apply (main.min.js:3)
    at main.min.js:1

这是一个具有基本路线的 Cordova 音隙设置。我是 Angular 新手。我查看了互联网,但在设置基本服务来保存我的所有数据以便我可以从所有路线访问它时遇到困难。任何帮助将不胜感激。

最佳答案

您需要将您的服务标识为 Controller 的依赖项。

第一步是确保在 Controller 之前定义服务。

然后更改 Controller 代码,以便将服务命名为依赖项。

angular.module('Manalator.controllers', ['Manalator.services'])
.controller('MainCtrl', ['$scope', function ($scope, manaFactory) {
    manaFactory.testString();
}]);

希望这有帮助!

关于javascript - 如何在 Angular 中添加服务以便 Controller 可以使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276850/

相关文章:

javascript - 将多边形导入 Google 我的 map

angularjs - 在两台机器上运行 AngularJS Seed E2E 测试时出错

angularjs 返回上一页 state.go stateParams

android - 如何升级应用程序?

javascript - 在 Three.js 中从缓冲区(而不是路径)加载 STL

javascript - 在javascript中迭代json数据

javascript - 如何做条件检查 express-validator 5.3.0?

javascript - UI Bootstrap Accordion - ng-repeat 内的向下箭头

javascript - 如何在 cordova 中动态加载 CSS

Android 构建失败 - 诊断,ImagePicker 插件依赖不匹配