2013-10-11 48 views
5

我有一個似乎是行爲不端的控制器。我已經刪除了所有的工作,使這個短暫的其他代碼:對象不是AngularJS中的函數

控制器:

'use strict'; 

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

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

}); 

查看:

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

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

</div> 

每次我點擊瀏覽器上的按鈕,它說:'TypeError:對象不是一個函數'或'沒有方法替換'。我究竟做錯了什麼?

+2

您是否定義了prevImage()?你是否點擊prevImage()按鈕? – chubbsondubs

+0

你有沒有找到這個答案?我有相同的輸出,但只有第一次點擊後,這工作正常。 –

+0

我用了一個保留的函數..'$ scope.register = fun ...'不起作用。 –

回答

1

創建新模塊時,需要指定第二個參數(其依賴關係)。如果你沒有,只需傳遞一個空數組。

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

你的例子可以訪問現有模塊(也就是當你不指定第二個參數),但隨後可能有一些代碼缺少發現錯誤(或我只是盲目的)。

+0

這使得控制器現在返回未定義狀態。不過謝謝。 – JohnRobertPett

+0

嘗試將您的代碼與本示例進行比較:http://plnkr.co/edit/igQ93Kt0SFkfJMvBRekY?p=preview – Martin

0

嘗試控制器的定義如下

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

function CarouselCtrl($scope) { 

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

不太確定您希望我如何實現該功能。你能給我一個正確的方向嗎? – JohnRobertPett

+0

刪除你的整個控制器代碼。並鍵入上面寫的內容。 –

+0

包括'use strict' –

3

某處有問題,你是接線的事情,我相信的樣子。我通常使用此腳手架:

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

的第一個參數是controller的名稱,和第二個是一個數組。在數組中,您可以定義要將什麼服務注入控制器,然後使用注入的服務作爲參數來定義回調函數。

0

我同意其他答覆,這是你的接線問題。試試這個小提琴爲例:http://jsfiddle.net/reblace/7fVQR/

聲明你的外層div像這樣:

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

然後您的控制器是這樣的:

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

我試過這個,它不適合我。對於Yeoman,我也使用了Angular generator,這不是它如何創建模塊,這似乎也打破了其他所有模塊。 – JohnRobertPett

+0

我在這個例子中的做法只有當它是獨立的(例如在JSFiddle中)時纔有效。您將視圖部分鏈接到範圍函數回調的方法很好。但是局部和控制器之間的接線有問題。你原來的問題並不包含足夠的信息來隔離問題。您可能需要重新開始,並驗證您可以使用您擁有的設置來獲得「Hello World」。 – reblace

11

你仍然有這個問題嗎?

我遇到了同樣的問題。對我來說問題是控制器和視圖中的函數名稱與我在同一視圖中使用的表單名稱相同。

更改表單名稱或函數名稱爲我解決了錯誤。

+0

感謝您的回覆。如果我沒有記錯的話,這是與命名問題。我自己的錯! – JohnRobertPett

相關問題