我一辈子都搞不懂为什么不能在控制器中调用这个函数。
单击accordion-group
属性时,会出现以下错误:Uncaught ReferenceError: getConversationsForUser is not defined
以下是html:
<ui-view id="smtConvoCard" layout="column" layout-fill layout-padding>
<div layout="row" flex layout-align="center center">
<md-card flex-gt-sm="90" onresize="resize()" flex-gt-md="80">
<md-card-content>
<md-list>
<h2>Conversations</h2>
<accordion close-others="oneAtATime">
<accordion-group heading="{{contact.FirstName}} {{contact.LastName}}" ng-repeat="contact in contacts" onclick="getConversationsForUser(contact.UserUID)">
<div>Test</div>
</accordion-group>
</accordion>
</md-list>
</md-card-content>
</md-card>
</div>
</ui-view>
下面是正在使用的控制器(部分代码):
controller('convCtrl', ['$scope', 'messageFactory', function ($scope, messageFactory) {
var currentUser = helpers.storage.get('UID');
$scope.contacts = [];
$scope.getContacts = function () {
/*Does stuff*/
};
//This is the function it is trying to call
$scope.getConversationsForUser = function (userUID) {
/*Does stuff*/
};
//Setup
$scope.getContacts();
}]);
我尝试将
onclick
更改为不同的元素,而是调用getContacts
函数,我总是得到Uncaught ReferenceError
我知道这个函数在我的范围内,因为我将
contacts
变量绑定到页面。 最佳答案
尝试:
<accordion-group heading="{{contact.FirstName}} {{contact.LastName}}" ng-repeat="contact in contacts" ng-click="getConversationsForUser(contact.UserUID)">
<div>Test</div>
</accordion-group>
别忘了在元素中插入一个
ng-controller="convCtrl"
来包装您的accordion
。更新
我添加了一个小解释:控制器
MySuperController
中的$scope必须通过添加到标记(=DOM元素)的ng-controller="MySuperController"
属性链接到DOM中,这样您的$scope变量将表示该控制器中的任何变量。一旦创建附加到此作用域(
$scope.myFunction = function () { /* ... */ }
)的函数,就可以调用它,即在触发事件时。这是通过ng-click
指令实现的,该指令将事件处理程序附加到其设置为属性的元素。