未捕获的对象 - 匿名函数Angular JS

时间:2014-07-11 08:20:05

标签: angularjs dependencies firebase factory angularfire

好的,我放弃了!我需要一些帮助。我花了很长时间阅读在S / O上提出的所有类似问题,但没有任何东西可以解决我的问题。 我正在尝试将工厂添加到angularFire应用程序中。

我收到'未捕获对象(匿名函数)'错误 - 通过Chrome检查员我确定了更具体的错误信息:https://docs.angularjs.org/error/ $ injector / nomod?p0 = ngLocale%22

这是我的HTML脚本信息:

<script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.2.18/angular.js"></script>
<script src="js/angular-route.js"></script>
<script src="js/app.js"></script>
<script src="js/controllers.js"></script>
<script src="js/factories.js"></script>

<script src='https://cdn.firebase.com/js/client/1.0.17/firebase.js'></script>
<script src='https://cdn.firebase.com/libs/angularfire/0.7.1/angularfire.min.js'></script>

这是我的controller.js:

legalmvc.controller('FormCtrl','FBRetrieve', function FormCtrl($scope, $location, FBRetrieve, $firebase) {
    var url = 'https://legalcitator.firebaseio.com';
    var fireRef = new Firebase(url);



    $scope.addCase = function () {
        $scope.FireBaseCases = new Firebase('https://legalcitator.firebaseio.com/case');
        $scope.caseData = {};

        var newAuthor = $scope.newAuthor;
        var newJournal = $scope.newJournal;
        var newArticleName = $scope.newArticleName;
        var newYear = $scope.newYear;

        if (!newAuthor.length || !newArticleName.length || !newJournal.length || newYear === null ) {
            return;
        }
        newAuthor = $scope.newAuthor.trim();
        newJournal = $scope.newJournal.trim();
        newArticleName = $scope.newArticleName.trim();

        var newCaseRow = $scope.FireBaseCases.child(newAuthor);
        newCaseRow.set({
            type: 'Case',
            author: newAuthor,
            journal: newJournal,
            articleName: newArticleName,
            year: newYear   }
        );


        $scope.newAuthor = '';
        $scope.newJournal ='';
        $scope.newYear =null;
        $scope.newArticleName= '';

    };





});

这是我的factory.js:

legalmvc.factory('FBRetrieve', function(type){

    var biblioRef = new Firebase('https://legalcitator.firebaseio.com/'+type);

    biblioRef.on('value', function(data) {
        if (data.val() === null) {
            return;
        }

        return data;


    });

});

这是app.js

var legalmvc = angular.module('legalmvc', ['FBRetrieve','ngRoute']);

如果有人能帮助我,我会深深感激,这件事给我一个动脉瘤!!

萨姆

编辑:

问题是我试图注入我的工厂'FBRetrieve'和外部模块。我删除了这个,然后我遇到的问题是在这段代码中

legalmvc.factory('FBRetrieve', function(type){

var biblioRef = new Firebase('https://legalcitator.firebaseio.com/'+type);

.....

似乎你不能将'type'作为参数传递给工厂函数,这将允许你在不同的URL上使用相同的功能。不能说我理解为什么。

谢谢你们!

2 个答案:

答案 0 :(得分:1)

Imho问题出在:var legalmvc = angular.module('legalmvc', ['FBRetrieve','ngRoute']);删除FBRetrieve条目。这不是一个外部模块,它是你的工厂。

您最有可能想要使用:

var legalmvc = angular.module('legalmvc', ['firebase','ngRoute']);

你应该注入$firebase而不是创建新对象new Firebase,这里解释了这背后的基本原理:https://docs.angularjs.org/guide/unit-testing

答案 1 :(得分:1)

由于工厂已在其已知的模块上注册,因此您不应将工厂注入模块的创建。

如果我错了,请纠正我,但模块声明只接受注入其他模块。

因此,从代码中您只需要从模块创建中删除FBRetrieve注入。 它变成了:

var legalmvc = angular.module('legalmvc', ['ngRoute']);

由于您的工厂和控制器位于同一模块上,因此在创建控制器时它将解析它。

如果您的工厂在另一个模块上,那么您将拥有:

var factoryModule = angular.module("factoryModule"); 
factoryModule.factory('FBRetrieve', function(type){ 
     ...
}

var legalmvc = angular.module('legalmvc',['factoryModule', 'ngRoute']);
legalmvc.controller('controller',['FBRetrieve', '$scope', 
   function(FBRetrieve, $scope){
       ...
}]);

希望它有所帮助。