Javascript 设置变量时,Angular Js ng init在ng repeat内工作不正常
我有一个ng repeat,在这里我检查一个if条件,在循环的每次重复结束时,我将一个变量设置为ng repeat的值Javascript 设置变量时,Angular Js ng init在ng repeat内工作不正常,javascript,angularjs,if-statement,angularjs-ng-repeat,ng-repeat,Javascript,Angularjs,If Statement,Angularjs Ng Repeat,Ng Repeat,我有一个ng repeat,在这里我检查一个if条件,在循环的每次重复结束时,我将一个变量设置为ng repeat的值 $scope.prvSid = ""; 这是我想在ng repeat中设置的变量 $scope.prvSid = ""; 这是我的ng重复代码 <ul class="chats" ng-repeat="chatData in chatboxData"> <li ng-class="{ 'out': chatData.sender_id == use
$scope.prvSid = "";
这是我想在ng repeat中设置的变量
$scope.prvSid = "";
这是我的ng重复代码
<ul class="chats" ng-repeat="chatData in chatboxData">
<li ng-class="{ 'out': chatData.sender_id == user_id , 'in': chatData.sender_id != user_id }">
{{ prvSid }}
{{ chatData.sender_id }}
<span ng-if=" prvSid != chatData.sender_id ">
<img class="avatar" alt="" src="{{ url('default/img/user_default_logo.jpg') }}" />
</span>
<div class="message">
<span class="body"> {{ chatData.message }} </span>
</div>
<span ng-init="prvSid = chatData.sender_id"></span>
{{ prvSid }}
</li>
</ul>
这个新的代码片段将对照聊天框中的用户列表检查当前用户ID。对于不是当前用户的所有用户,显示内容 方法#1(首选)
angular
.module('应用程序',[])
.controller('myCtrl',function(){
var vm=这个;
var-prvSid=null;
vm.chatboxData=[{id:1},{id:1},{id:2},{id:3}];
vm.chatboxData.forEach(函数(chatbox){
if(prvSid!==chatbox.id){
chatbox.showIcon=true;
}
prvSid=chatbox.id;
});
})
-
偶像
{{::chatData.id}
此新代码段将对照聊天框中的用户列表检查当前用户ID。对于不是当前用户的所有用户,显示内容
方法#1(首选)
angular
.module('应用程序',[])
.controller('myCtrl',function(){
var vm=这个;
var-prvSid=null;
vm.chatboxData=[{id:1},{id:1},{id:2},{id:3}];
vm.chatboxData.forEach(函数(chatbox){
if(prvSid!==chatbox.id){
chatbox.showIcon=true;
}
prvSid=chatbox.id;
});
})
-
偶像
{{::chatData.id}
创建一个plnkr,以便其他人可以提供更多帮助easily@NitsanBaleli数据来自数据库请简化您的代码示例,使其更易于回答。@Henry Zou我已简化并在问题中添加了更多说明。创建plnkr,以便其他人可以提供更多帮助easily@NitsanBaleli数据来自数据库请进一步简化您的代码示例,以便于回答。@Henry Zou我已简化并在问题中添加了更多说明。请您告诉我点(.)规则的含义或使用点(.)规则。同时,让我试试上面的解决方案,谢谢你对这个问题的回答,这些变量是“活的”。当prvSid更新时。您总是在计算ngif中的最后一个(稳定)值。你能再解释一下什么是prvSid吗?总体来说,这应该做什么?我已经创建了一个简化的工作代码段。它将仅显示该用户第一条消息的用户图标。它使用controllerAs语法(添加点)。并将代码移动到控制器,而不是使用ng-init。通过使用“”,可以提供。(点)符号(请参阅上面的链接)。这是避免子范围创建自己的变量时出现问题的最佳实践。这里不使用Lodash。forEach是一个内置的javascript函数,用于在数组中循环。引用只是我用于每个代码示例的代码片段。实际代码不使用它。for each循环将使用“showIcon”更新每个项目,以指示是否显示图标。prvSid=chatbox.id的作用与原始代码相同。请记住我的代码示例,我已经简化了,它没有使用与您相同的vars名称/对象。请您告诉我是什么意思,或者使用点(.)规则。同时,让我试试上面的解决方案,谢谢你对这个问题的回答,这些变量是“活的”。当prvSid更新时。您总是在计算ngif中的最后一个(稳定)值。你能再解释一下什么是prvSid吗?总体来说,这应该做什么?我已经创建了一个简化的工作代码段。它将仅显示该用户第一条消息的用户图标。它使用controllerAs语法(添加点)。并将代码移动到控制器,而不是使用ng-init。通过使用“”,可以提供。(点)符号(请参阅上面的链接)。这是避免子范围创建自己的变量时出现问题的最佳实践。这里不使用Lodash。forEach是一个内置的javascript函数,用于在数组中循环。引用只是我用于每个代码示例的代码片段。实际代码不使用它。for each循环将使用“showIcon”更新每个项目,以指示是否显示图标。prvSid=chatbox.id的作用与原始代码相同。请记住我的代码示例已经简化,它没有使用与您相同的vars名称/对象。
$scope.getlasttwosecMsgs = function(user_id_chat,chat_id,user,chatboxData,is_new) {
$http.get(url+'/getlasttwosecMsgs/'+chat_id).success(function(data){
angular.forEach(data, function(value, key) {
var exists = $scope.containsObject(value,chatboxData);
if (!exists) {
$scope.chatboxData.push(value);
console.log($scope.chatboxData);
};
});
});
}
$scope.containsObject = function(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (angular.equals(list[i], obj)) {
return true;
}
}
return false;
};