我有一个像
这样的按钮<div class="button" ng-repeat="event in events"
ng-click="selectEvent($index, event, generate)">
Content
</div>
其中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);
};
和函数generate()
在JS文件的某处定义。
答案 0 :(得分:5)
前言:@MaximShoustin的回答是正确。但是,我不确定它是否解决了这里发生的一些其他问题。
另外,我不希望这听起来有点居高临下,这只是建设性的批评。拿走或离开它。
为什么?
您似乎正在尝试在视图中连接业务逻辑。换句话说,你说“当你点击这个东西时,调用这个函数,然后在你完成时调用另一个函数”。
$scope.doSomething = function($index, event) {
//do stuff
$scope.generate();
};
$scope.generate = function (){
//more stuff.
};
我正在具体谈到这一行:
callback($scope, $http);
这里的目的是什么?对于每个事件,“生成”是否会有所不同?为什么必须将$scope
和$http
传递给它?您应该可以访问整个控制器功能。
好像你想在这里做一些疯狂的事情。也许我不明白你想要解决的问题。
答案 1 :(得分:3)
听起来像Angular没有看到generate
回调。确保它定义为控制器,如:
$scope.generate = function(){/**/}
或
$scope.generate = function(){
generate();// if it defined out of scope
}
或
$scope.generate = generate;
答案 2 :(得分:1)
要使其正常工作,generate
必须在范围内。 Angular模板需要能够看到它。因此,您可以在控制器中定义它:
$scope.generate = generate;
这将分配您当前的生成函数对Angular可见。