Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 设置变量时,Angular Js ng init在ng repeat内工作不正常_Javascript_Angularjs_If Statement_Angularjs Ng Repeat_Ng Repeat - Fatal编程技术网

Javascript 设置变量时,Angular Js ng init在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

我有一个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 == 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;
    };