Javascript 如何在Angular中添加服务,以便控制器可以使用它?

Javascript 如何在Angular中添加服务,以便控制器可以使用它?,javascript,angularjs,cordova,phonegap-plugins,Javascript,Angularjs,Cordova,Phonegap Plugins,我有一个基本的角度设置。我想添加另一个factory服务,以便mainCtrl可以使用它 这是我的controller.js angular.module('Manalator.controllers', []) .controller('MainCtrl', ['$scope', function ($scope, manaFactory) { manaFactory.testString(); }]); angular.module('Manalator.s

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

这是我的controller.js

angular.module('Manalator.controllers', [])
    .controller('MainCtrl', ['$scope', function ($scope, manaFactory) {
        manaFactory.testString();
    }]);
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';
        };
    }]);
这是我的services.js

angular.module('Manalator.controllers', [])
    .controller('MainCtrl', ['$scope', function ($scope, manaFactory) {
        manaFactory.testString();
    }]);
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
TypeError:无法读取未定义的属性“testy”
新建时(controllers.js:3)
at Object.i[as invoke](main.min.js:1)
在$get.f.instance(main.min.js:2)
在m处(main.min.js:1)
在s(main.min.js:1)
在$get.e处(main.min.js:1)
在main.min.js:1
在p.$get.p.$eval(main.min.js:3)
在p.$get.p.$apply(main.min.js:3)
在main.min.js:1

这是一个cordova phonegap设置,具有基本路由。我是个新手。我浏览过互联网,我很难设置一个基本服务来保存我的所有数据,这样我就可以从我的所有路线访问它。任何帮助都将不胜感激。

您需要将您的服务标识为控制器的依赖项

第一步是确保在控制器之前定义服务

然后更改控制器代码,使其将服务命名为依赖项

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

希望这有帮助

非常确定
manaFactory
也需要声明为依赖项:)谢谢!我已经像这样将其添加到控制器中。但它仍然是错误的。我不需要将其添加到路线中吗?