好的,我放弃了!我需要一些帮助。我花了很长时间阅读在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上使用相同的功能。不能说我理解为什么。
谢谢你们!
答案 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){
...
}]);
希望它有所帮助。