2013-10-11 7 views
5

Ich habe einen Controller, der sich zu benehmen scheint. Ich habe alle anderen Code entfernt, dass dies kurz machen funktioniert:Objekt keine Funktion in AngularJS

Controller:

'use strict'; 

angular.module('AppliedSiteApp').controller('CarouselCtrl', function ($scope) { 

    $scope.nextImage = function() { 
     console.log('hi'); 
    } 

}); 

Ausblick:

<div class="carousel" ng-controller="CarouselCtrl"> 

    <ul class="nav"> 
     <li ng-click="prevImage()">&lt;</li> 
     <li ng-click="nextImage()">&gt;</li> 
    </ul> 

</div> 

Jedes Mal, wenn ich auf die Schaltfläche im Browser klicken Sie sagt: 'TypeError: Objekt ist keine Funktion' oder 'keine Methode ersetzen'. Was mache ich falsch?

+2

Haben Sie die prevImage() definiert? Klicken Sie auf die Schaltfläche prevImage()? – chubbsondubs

+0

Haben Sie jemals eine Antwort darauf gefunden? Ich habe den Fall mit der gleichen Ausgabe aber erst nach dem ersten Klick, was gut funktioniert. –

+0

Ich habe eine Funktion verwendet, die reserviert ist. '$ Scope.register = fun ...' wird nicht funktionieren. –

Antwort

1

Wenn Sie ein neues Modul erstellen, müssen Sie einen zweiten Parameter angeben (seine Abhängigkeiten). Wenn Sie keine haben, übergeben Sie einfach ein leeres Array.

angular.module('AppliedSiteApp', [])... 

Ihr Beispiel könnte ein bestehendes Modul zugreifen (das ist, wenn Sie nicht das zweite Argument nicht angeben), aber dann gibt es wahrscheinlich einige Code fehlen, den Fehler zu erkennen (oder ich bin einfach blind).

+0

Dadurch wird der Controller jetzt als undefined zurückgegeben. Trotzdem danke. – JohnRobertPett

+0

Versuchen Sie, Ihren Code mit diesem Beispiel zu vergleichen: http://plnkr.co/edit/igQ93Kt0SFkfJMvBRekY?p=preview – Martin

0

versuchen, die folgende Definition der Controller

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

function CarouselCtrl($scope) { 

    $scope.nextImage = function() { 
     console.log('hi'); 
    } 
} 
+0

Nicht sicher, wie Sie das implementieren möchten. Kannst du mir einen Schubs in die richtige Richtung geben? – JohnRobertPett

+0

löschen Sie den gesamten Controller-Code. und tippe, was oben geschrieben wurde. –

+0

einschließlich 'verwenden streng' –

3

Irgend etwas stimmt nicht mit der Art und Weise Sie die Dinge Verdrahtung sind glaube ich. Normalerweise verwende ich dieses Gerüst:

angular.module('AppliedSiteApp.controllers', []). 
    controller('CarouselCtrl', ['$scope', function($scope) { 
    $scope.nextImage = function() { 
     console.log('hi'); 
    } 
    }]); 

Das erste Argument für controller ist der Name, und das zweite ist ein Array. Im Array definieren Sie, welche Dienste Sie in Ihren Controller einspeisen, und dann definieren Sie die Rückruffunktion mit den injizierten Diensten als Parameter.

0

Ich stimme den anderen Antworten zu, dass es ein Problem mit Ihrer Verkabelung ist. Versuchen Sie, diese Geige als Beispiel: http://jsfiddle.net/reblace/7fVQR/

Erklären Sie Ihre äußere div wie folgt aus:

<div ng-app="app" ng-controller="MainController"> 

Und dann Ihren Controller wie folgt aus:

var app = angular.module('app', []); 
function MainController($scope) { ... } 
+0

Ich habe das versucht und es funktioniert nicht für mich. Ich benutze den Angular-Generator auch für Yeoman, und das ist nicht so, wie er Module erzeugt, was alles andere ebenfalls zu zerstören scheint. – JohnRobertPett

+0

Die Art, wie ich es in diesem Beispiel mache, funktioniert nur, wenn es eigenständig ist (zB in JSFiddle). Ihr Ansatz, die Ansicht partiell mit dem Rückruf der Bereichsfunktion zu verknüpfen, ist in Ordnung. Aber es ist etwas falsch mit der Verkabelung zwischen dem Teil und dem Controller. Ihre ursprüngliche Frage enthält nicht genügend Informationen, um das Problem zu isolieren. Vielleicht möchten Sie von vorn beginnen und verifizieren, dass Sie mit dem Setup, das Sie haben, ein "Hello World" erhalten können. – reblace

11

Sind Sie immer noch ein Problem damit zu haben?

Ich lief in das gleiche Problem. Das Problem für mich war, dass der Funktionsname im Controller und in der Ansicht den gleichen Namen hatte wie ein Formular, das ich in derselben Ansicht verwendete.

Die Änderung des Formularnamens oder des Funktionsnamens hat den Fehler für mich behoben.

+0

Danke für die Antwort. Wenn ich mich richtig erinnere, hatte das mit einem Namensproblem zu tun. Meine eigene Schuld! – JohnRobertPett

Verwandte Themen