5

我有一个似乎行为不端的控制器。我已经删除了所有其他有助于缩短代码的代码:

控制器:

'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:对象不是函数”或“没有方法替换”。我究竟做错了什么?

4

5 回答 5

11

你还有这个问题吗?

我遇到了同样的问题。对我来说问题是控制器和视图中的函数名称与我在同一个视图中使用的表单名称相同。

更改表单名称或函数名称为我修复了错误。

于 2014-05-04T19:27:00.363 回答
3

我相信你接线的方式有问题。我通常使用这个脚手架:

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

第一个参数controller是名称,第二个参数是一个数组。在数组中,您定义要注入控制器的服务,然后定义回调函数,并将注入的服务作为参数。

于 2013-10-11T16:36:03.010 回答
1

创建新模块时,您需要指定第二个参数(它的依赖项)。如果没有,只需传递一个空数组。

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

您的示例可以访问现有模块(即您未指定第二个参数时),但是可能缺少一些代码来发现错误(或者我只是盲目)。

于 2013-10-11T16:28:02.223 回答
0

尝试以下控制器的定义

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

function CarouselCtrl($scope) {

    $scope.nextImage = function() {
        console.log('hi');
    }
}
于 2013-10-11T16:30:25.027 回答
0

我同意其他回答,即这是您的接线问题。试试这个小提琴作为例子:http: //jsfiddle.net/reblace/7fVQR/

像这样声明你的外部 div:

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

然后你的控制器是这样的:

var app = angular.module('app', []);
function MainController($scope) { ... }
于 2013-10-11T16:38:35.043 回答