我的app.js包含

var app = angular.module('myApp', []).
config(['$routeProvider', function ($routeProvider, $http) {
    ...
}]);

服务看起来像
app.service('MyService', function () {
    addNums = function (text) {
        return text + "123";
    }
});

在 Controller 中,我有
function adminCtrl ($scope, MyService) {
    $scope.txt = MyService.addNums("abc");
};

它们都在单独的文件中。问题是我遇到了错误Unknown provider: MyServiceProvider <- MyService
看来我做错了什么。

最佳答案

如果您忘记告诉Angular加载myApp模块,则可能会发生提供程序错误。例如,您的index.html文件中是否包含此文件?:

<html ng-app="myApp">

您的服务缺少“this”:
this.addNums = function(text) {

Fiddle

Angular社区似乎对何时使用service()与factory()以及如何正确编码它们感到困惑。所以,这是我的简短教程:

service() method期望为JavaScript constructor function。许多使用service()的Angular代码示例都包含不是构造函数的代码。通常,它们返回一个对象,这违背了使用service()的目的—下文将作进一步介绍。如果需要创建和返回对象,则可以使用factory()代替。通常,只需要一个构造函数,就可以使用service()了。

以下引文来自AngularJS Google网上论坛的不同帖子:



因此,当人们使用service()及其代码“返回”一个对象时,由于JavaScript“new”的工作方式是一种浪费:“new”将首先创建一个全新的JavaScript对象(然后使用原型(prototype)进行处理) ,然后调用由myService()定义的函数,等等。(在此,我们实际上并不关心这些细节),但是由于由myService()定义的函数返回了自己的对象,因此“new”的作用有些奇怪:丢弃对象只是花时间创建并返回myService()函数创建的对象,因此返回“浪费”。



同样,未记录的服务命名约定似乎是驼峰式,首字母小写:例如,myService。

关于javascript - AngularJS服务在单独的文件中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13395686/

10-10 22:49