我这辈子都想不通为什么我不能在我的 Controller 中调用这个函数。
单击 accordion-group
属性时出现此错误:
未捕获的 ReferenceError:未定义 getConversationsForUser
这是 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 (部分代码):
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
变量数据绑定(bind)到页面。
最佳答案
尝试:
<accordion-group heading="{{contact.FirstName}} {{contact.LastName}}" ng-repeat="contact in contacts" ng-click="getConversationsForUser(contact.UserUID)">
<div>Test</div>
</accordion-group>
并且不要忘记在包装您的 accordion
的元素中插入 ng-controller="convCtrl"
。
更新
我添加一点解释: Controller MySuperController
中的 $scope 必须通过添加到标记(= DOM 元素),这样您的 $scope 变量将代表此 Controller 中的任何变量。
一旦您创建了一个附加到该范围的函数 ($scope.myFunction = function () {/* ... */}
),您就可以调用它,即,当一个事件被触发。这是通过 ng-click
指令实现的,该指令将事件处理程序附加到将其设置为属性的元素。
关于javascript - AngularJS 从点击调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30813257/