参数'fn'不是函数得到的string
我有一个angular色应用程序,我绑定了一个控制器的一部分,
从那时起我得到了参数“FN”不是一个函数错误,任何人都可以看我的代码,并解释为什么我得到了错误?
我会非常gratefull 🙂
HTML的标记:
<section class="col-lg-12" data-ng-controller="MessageController"> <fieldset> <legend>{{ 'MESSAGES' | translate }}</legend> </fieldset> <div class="margin-left-15"> <ul class="list-style-button"> <li data-ng-repeat="message in MSG">{{ message }}</li> </ul> </div> </section>
控制器:
(function () { 'use strict'; var controllers = angular.module('portal.controllers'); controllers.controller('MessageController',['$scope','MessageService','$rootScope', function MessageController($scope, MessageService, $rootScope){ $rootScope.MSG = MessageService.getMessages(); $rootScope.$watch('MSG', function(newValue){ $scope.MSG = newValue; }); }]); }());
服务:
(function(){ 'use strict'; var messageServices = angular.module('portal.services'); messageServices.factory('MessageService', ['MessageData','localStorageService', 'UserService'], function(MessageData, localStorageService, UserService){ return new MessageService(MessageData, localStorageService, UserService); }); function MessageService(MessageData, localStorageService, UserService){ this.messageData = MessageData; this.localStorageService = localStorageService; this.userService = UserService; } MessageService.prototype.getMessages = function(){ var locale = this.userService.getUserinfoLocale(); var messages = this.localStorageService.get(Constants.key_messages+locale); if(messages !== null && messages !== undefined){ return JSON.parse(messages); } else { return this.messageData.query({locale: locale}, $.proxy(function(data, locale){ this.save(Constants.key_messages+locale, JSON.stringify(data)); }, this)); } }; MessageService.prototype.save = function(key, value){ this.localStorageService.add(key, value); }; }());
数据:
(function(){ 'use strict'; var data = angular.module('portal.data'); data.factory('MessageData', function($resource){ return $resource(Constants.url_messages,{},{ query: {method: 'GET', params: {locale: 'locale'}, isArray: true} }); }); }());
html头的js文件顺序:
<script src="js/lib/jquery-1.10.js"></script> <script src="js/lib/angular.js"></script> <script src="js/lib/angular-resource.js"></script> <script src="js/lib/angular-translate.js"></script> <script src="js/lib/angular-localstorage.js"></script> <script src="js/lib/jquery-cookies.js"></script> <script src="js/lib/bootstrap.js"></script> <script src="js/portal.js"></script>
问题在于使用“错误”的语法来创build服务
而不是使用:
messageServices.factory('MessageService', ['MessageData','localStorageService', 'UserService'], function(MessageData, localStorageService, UserService){ return new MessageService(MessageData, localStorageService, UserService); } );
我不得不使用:
messageServices.factory('MessageService', ['MessageData','localStorageService', 'UserService', function(MessageData, localStorageService, UserService){ return new MessageService(MessageData, localStorageService, UserService); } ]);
我很快就用参数closures了数组,因为我仍然在学习,所以我没有直接看到它,不pipe怎样,我希望我能够帮助别人发现这一点。
今天我犯了同样的错误,犯了这个愚蠢的错误:
(function(){ angular .module('mymodule') .factory('myFactory', 'myFactory'); // <-- silly mistake myFactory.$inject = ['myDeps']; function myFactory(myDeps){ ... } }());
而不是:
(function(){ angular .module('mymodule') .factory('myFactory', myFactory); // <-- right way to write it myFactory.$inject = ['myDeps']; function myFactory(myDeps){ ... } }());
事实上,string“myFactory”被引入到正在等待函数而不是string的注入器中。 这解释了[ng:areq]错误。
上述答案在很大程度上帮助我纠正了我的申请中由于另一个原因而产生的同样的问题。
在构build时,我的客户端应用程序正在被连接和缩小,所以我正在编写我的Angular以避免相关的问题。 我定义我的config
如下
config.$inject = []; function config() { // config stuff }
(我定义了一个函数, $inject
它作为一个模块,并声明它是什么)。
然后我尝试注册config
,就像我在应用程序中注册其他模块(控制器,指令等)。
angular.module("app").config('config', config); // this is bad! // for example, this is right angular.module("app").factory('mainService', mainService);
这是错的,给了我上述的错误。 所以我改变了
angular.module("app").config(config);
它的工作。 我猜想angular devs意图config
有一个单一的实例,并通过这样使Angular在config
注册时不接受名称。
我有同样的问题,在我的情况下,问题是与angular度cookies.js文件。 这是在其他angularjs脚本文件夹,当我用gulp来缩小我的js文件错误发生。
简单的解决scheme只是将angular度cookies.js文件放置到选定文件夹之外的另一个文件夹来缩小js文件。