回调和AngularJS(ng-click)

J D*_*J D 1 javascript angularjs

我有一个按钮就好

<div class="button" ng-repeat="event in events" 
    ng-click="selectEvent($index, event, generate)">
 Content
</div>
Run Code Online (Sandbox Code Playgroud)

其中generate应该是回调函数,但由于某种原因,它在调用时是未定义的.

就像有人点击按钮一样,我明白了 TypeError: undefined is not a function.我的selectEvent()代码看起来像

$scope.selectEvent = function ($index, event, callback) {
    // Do some stuff with $index and event

    console.log(callback); // This is undefined
    callback($scope, $http);
};
Run Code Online (Sandbox Code Playgroud)

和函数generate()在JS文件中的某个地方定义.

Ben*_*esh 5

前言:@MaximShoustin的回答是正确的.但是,我不确定它是否解决了这里发生的一些其他问题.

此外,我不希望这听起来有点居高临下,这只是建设性的批评.要么接受,要么离开它.

回调的连接应该由您的控制器完成,而不是您的视图.

为什么?

  1. 如果您的视图连接回调,则更难测试控制器.
  2. 这是"商业逻辑".
  3. 视图应该只关注显示事物和连接事件.

看起来您正试图视图中连接业务逻辑.换句话说,你说"当你点击这个东西时,调用这个函数,然后在你完成时调用另一个函数".

$scope.doSomething = function($index, event) {
    //do stuff
    $scope.generate();
};

$scope.generate = function (){
    //more stuff.
};
Run Code Online (Sandbox Code Playgroud)

为什么要将控制器范围的变量传递给由事件绑定中的计算表达式传递给函数的函数?似乎很复杂.

我是专门讲这一行的:

callback($scope, $http);
Run Code Online (Sandbox Code Playgroud)

这里的目的是什么?对于每个事件,"生成"是否会有所不同?为什么你要通过$scope$http成吗?您应该可以访问整个控制器功能.

看起来你正试图在这里做一些疯狂的事情.也许我不明白你想要解决的问题.