AngularJS reporter l'erreur: l'Argument 'fn' est pas une fonction, a obtenu de l'Objet
Je suis d'essayer de faire de mon application recueillir les données avant de modifier l'itinéraire, comme le montre beaucoup de, une vidéo de Jean-Lindquist: http://www.youtube.com/watch?v=P6KITGRQujQ&list=UUKW92i7iQFuNILqQOUOCrFw&index=4&feature=plcp
J'ai tout accroché, mais quand il est temps pour le report de l'objet à résoudre, j'obtiens l'erreur:
Error: Argument 'fn' is not a function, got Object
at assertArg (http://localhost:9000/components/angular/angular.js:1019:11)
at assertArgFn (http://localhost:9000/components/angular/angular.js:1029:3)
at annotate (http://localhost:9000/components/angular/angular.js:2350:5)
at invoke (http://localhost:9000/components/angular/angular.js:2833:21)
at Object.instantiate (http://localhost:9000/components/angular/angular.js:2874:23)
at http://localhost:9000/components/angular/angular.js:4759:24
at <error: illegal access>
at Object.Scope.$broadcast (http://localhost:9000/components/angular/angular.js:8261:28)
at http://localhost:9000/components/angular/angular.js:7417:26
at wrappedCallback (http://localhost:9000/components/angular/angular.js:6797:59) angular.js:5704
Mon code ressemble à ceci:
Route -
angular.module( 'saApp' )
.config( function ( $routeProvider, $locationProvider ) {
$routeProvider
.when( '/dashboard', {
templateUrl: 'views/dashboard/dashboard.html',
controller: Dashboard,
resolve: Dashboard.resolve
}
});
contrôleur -
var Dashboard = angular.module( 'saApp' ).controller(
function ( $scope, dataset ) {
$scope.data = dataset;
} );
Dashboard.resolve = {
dataset: function ( $q, DBFactory ) {
console.log("dataset enter")
var deferred = $q.defer();
DBFactory.get( {noun: "dashboard"},
function ( data ) {
console.log("resolving");
deferred.resolve( data );
} );
console.log("promise");
return deferred.promise;
}
}
Sur exécuter, il exécute le résoudre, le DBFactory ressource va, vient et tout fonctionne jusqu'à la réelle différée".résoudre(de données);" qui est l'endroit où puis-je obtenir de l'erreur collé ci-dessus. Si je commente cette ligne, bien sûr, je n'ai pas de page, mais je reçois aussi pas d'erreur.
Le contenu de données, de retour de DBFactory est un objet JSON, qui est ce qui est prévu et indiqué dans tous les exemples que j'ai vu en ligne et des vidéos.
à l'aide de:
AngularJS 1.0.6
Pensées? Merci à tous pour votre aide.
Mise à JOUR:
Il semble que la façon dont j'ai été l'aide de mes itinéraires et de définir le contrôleur avec l'espace de noms:
var Dashboard = angular.module( 'saApp' ).controller()
était à blâmer pour cela. Quand j'ai tout simplement utiliser un standard de déclaration de fonction:
function DashboardCtrl($scope, dataset) {
$scope.data = dataset;
}
il répond à la "recherche de la fonction, a obtenu de l'objet" d'erreur. La chose bizarre c'est que j'ai changé pour l'utiliser comme un objet "var DashboardCtrl = angulaire.module('saApp').contrôleur()" ou même ce que je l'ai eu à l'avant qu'à partir du générateur yeoman, et est spécifié dans la angularjs docs:
angular.module( 'saApp' )
.controller( 'DashboardCtrl', function ( $scope, dataset ) {});
avec une voie d':
.when( '/dashboard', {
templateUrl: 'views/dashboard/dashboard.html',
controller: 'DashboardCtrl'
} )
ne fonctionnerait pas.
juste donné un aller, même erreur
Je suis bloqué sur cette trop! Je veux faire référence à une méthode de contrôleur de la route.résoudre des biens dans le 2ème argument de $routeProvider.lorsque(). Comment puis-je faire lors de l'utilisation du module de contrôleur de définition? (également à l'aide de yeoman), je suis coincé!
J'ai eu une erreur similaire lors de l'utilisation de CoffeeScript
module ($provide) -> $provide.provider 'XX', -> $get: -> "something"
comme CoffeeScript retourne la dernière valeur, qui a été mal interprété par l'injecteur. J'ai ajouté un null
après la déclaration de résoudre.L'erreur se produit en raison de contrôleur reçoit un objet au lieu d'une fonction. J'ai eu ce problème parce que ES6 classe ont été déclarés sans l'exportation "par défaut".
OriginalL'auteur Phil Pastorek | 2013-04-22
Vous devez vous connecter pour publier un commentaire.
J'ai eu cette erreur plusieurs fois et finalement trouvé la parfaite solution simple et. Il suffit de mettre votre nom de contrôleur dans le "quand" de construction entre guillemets comme ceci:
au lieu de
OriginalL'auteur
Renvoie le contrôleur de l'objet:
Mais la route veut la réelle fonction de contrôleur. Donc.... en supposant que cela soit votre contrôleur et de résoudre: (notez que j'ai nommé le contrôleur 'IndexCtrl" ... je ne pense pas que vous faisiez que dans votre code)
Vous pouvez le look angulaire du contrôleur en passant par le nom. (avis du contrôleur de référence est une chaîne de caractères)
OriginalL'auteur
Également se produire si vous avez accidentellement inclure parenthèse supplémentaires lorsque vous lien dans votre usine:
MAUVAIS:
BON:
MonkeyFactory
entièrement comme un oubli, mais ce qui m'a à la recherche sur le droit chemin.OriginalL'auteur
J'ai eu le même problème. Vous pouvez le résoudre en procédant de la manière suivante..
Supprimer le contrôleur de la déclaration de la routes .lorsque()
la méthode. Donc, ce...
devient juste ce...
Maintenant pour maintenir votre portée, ajoutez le contrôleur de déclaration dans votre modèle html. Par exemple..
OriginalL'auteur
Ou si vous avez, par erreur, a fait l'injection, d'après le nom de l'usine/contrôleur comme ceci (Le mauvais chemin);
Le droit chemin;
OriginalL'auteur
J'ai eu cette erreur en faisant module-moqueur avec Karma en Coffeescript.
La solution était d'ajouter "return null" à la fin de l' ($)-> fonction. Sans cela, coffeescript sera de retour le résultat de $fournir.valeur(), qui je pense est un objet, qui est en quelque sorte causes "'fn n'est pas une fonction".
Exemple:
OriginalL'auteur
J'ai été en mesure de résoudre ce "fn n'est pas une fonction, a obtenu de l'objet" par l'importation de ma "fonction" à partir d'un autre fichier en ajoutant {} comme ceci:
à l'ancienne:
Référence à cette question: https://github.com/swimlane/angular-data-table/issues/189
OriginalL'auteur
Ce sera également se produire si vous utilisez Coffescript + angularjs.
Depuis angularjs prend en charge Coffescript classes.
puis dans le
.lorsque()
le "contrôleur: IndexCtrl' voit un Objet, pas une fonction.
OriginalL'auteur