我有一些似乎无法调试的 Angular 代码。加载页面在导航下拉栏中完美呈现我的所有组。当我点击其中一个组时,messagesIndex 函数被调用,该组中的所有消息都将正常显示,此时一切正常。问题是当我点击另一个组,甚至是同一个组时,messagesIndex 函数不会再次加载。
我花了很多时间试图调试这个问题无济于事,但我已经缩小了问题发生的确切位置,似乎没有任何我可以找到的问题。
我只用 $scope.groupID 替换了 messagesIndex 函数的内容,并输出了结果和一个随机数。groupID 与随机数一起显示,每次我点击不同的组时,都会出现不同的 ID 和随机数,这意味着 JADE/HTML 运行正常,函数头是金色的。
然后,我使用原始的 messagesIndex 函数,并在 HTTP 请求之前和之后添加了 $scope.random1 和 scope.random2 以及分配给它们的随机数到函数的开头和结尾。第一次调用该函数时,生成并输出了两个随机数,虽然http请求是异步的,但所有值都正常返回,提示该函数调用完全,除非成功后HTTP请求拖拽有问题回复?然后当我通过单击另一个组再次调用它时。两个随机数都没有改变,表明该函数要么根本没有调用,要么在执行其中的第一行代码之前停止。
坦率地说,我很难过。该代码看起来与许多有效的 HTTP 请求基本相同,但由于某种原因我不能调用它两次。
下面是 AngularJS 代码:
angular.module('angular-client').controller('GroupMeCtrl',
['$scope', '$http', '$templateCache', 'Auth', function($scope, $http, $templateCache) {
$scope.groupsIndex = function(){
$http({
method: 'GET',
url: 'https://api.groupme.com/v3/groups?token=' + token,
cache: $templateCache
}).
success(function(data, status) {
$scope.groupsIndex = data.response;
$scope.stat = status;
}).
error(function(data, status, headers, config) {
$scope.groupsIndex = data.response;
$scope.stat = status || "Request failed";
});
};
$scope.messagesIndex = function($groupID){
$http({
method: 'GET',
url: 'https://api.groupme.com/v3/groups/' + $groupID + '/messages?token=' + token,
cache: $templateCache
}).
success(function(data, status) {
$scope.messagesIndex = data;
$scope.stat = status;
}).
error(function(data, status) {
$scope.messagesIndex = data.response;
$scope.stat = status || "Request failed";
});
};
}]);
下面是我的 JADE:
li.dropdown
a.dropdown-toggle(href='#', data-toggle='dropdown')
| Groups
b.caret
ul.dropdown-menu
li(ng-repeat="group in groupsIndex")
a(ng-click="messagesIndex(group.id)") {{group.name}}
.message-box(ng-repeat="message in messagesIndex.response.messages")
.avatar-container
img(src="{{message.avatar_url}}").avatar
.text
.user-name
{{message.name}}
span
{{message.text}}