- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 angularjs 构建一个多消息聊天框。在 Angularjs 数组中,我有四个用户。
这是我的问题:
应用程序只显示一个弹出框,无论用户点击了什么,如屏幕截图所示
这是我要实现的目标
我想要的是类似 facebook 多聊天消息框的东西。也就是说,如果我选择多个用户,例如。如果选择三个用户,两个用户应该会看到与这些用户对应的两个弹出消息框我应该看到三个用户弹出框等等...
这是到目前为止的代码
<!doctype html>
<html ng-app="myapp">
<head>
<title></title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular.min.js"></script>
<script>
var app = angular.module('myapp', []);
app.controller('MainCtrl', function($scope) {
$scope.arr= [
{name:"user1"},
{name:"user2"},
{name:"user3"},
{name:"user4"}
];
//pop div
$scope.popIt = function(id){
$scope.popId = ($scope.popId==id)?-1:id;
}
//hide/unhide div partly working
$scope.IsVisible = false;
$scope.ShowHide = function(id){
$scope.IsVisible = ($scope.IsVisible = true)?-1:id;
}
});
</script>
<style>
.sidebar {
width: 250px;
position: fixed;
height: 100%;
right: 0px;
top: 0px;
padding-top: 200px;
padding-bottom: 10px;
border: 1px solid #b2b2b2;
text-align:bottom;
}
.contact_box{
position:fixed;
bottom:-5px;
width:250px;
// height:100px;
background:black;
color:white;
border-radius:5px 5px 0px 0px;
bottom: 0px;
right: 270px;
display: inline-block;
}
</style>
</head>
<body>
<div class="sidebar" ng-app="myapp" ng-controller="MainCtrl">
<ul>
<li ng-repeat='ret in arr track by $index'>
<div ng-click="popIt($index)" >
{{ret.name}}</div>
<div ng-if="popId==$index" class="contact_box">
<button style="float:right" ng-click="popIt($index)">Close</button>
<button style="float:left" ng-click="ShowHide()">hide/unhide</button>
<br>
<div style="height:100px;" ng-hide="IsVisible">
<b>Username:</b> {{ret.name}}
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</body>
</html>
更新部分:
感谢 Akber Iqbal 爵士,您的解决方案运行良好。还有一件事与我接壤,尽管它不在我的职位范围内。我的隐藏/取消隐藏按钮仅隐藏或最小化一个消息框。 如果我尝试隐藏另一个弹出框,它将打开第一个已经隐藏的弹出框。
根据代码,隐藏/取消隐藏按钮 的 id 似乎有冲突下面
//hideUnhide message box
$scope.hideUnhideIt = function(id){
$scope.hideUnhideId = ($scope.hideUnhideId==id)?-1:id;
}
这是我在您的解决方案中添加隐藏/取消隐藏消息框的方法
<!doctype html>
<html ng-app="myapp">
<head>
<title></title>
<style>
.sidebar {
width: 20%;
position: fixed;
height: 100%;
right: 0px;
top: 0px;
padding-top: 50px;
padding-bottom: 10px;
border: 1px solid #b2b2b2;
text-align: bottom;
}
.mainArea {
position: fixed;
width: 80%;
bottom: 0%
}
.contact_box {
position: relative;
bottom: -5px;
width: 250px;
// height:auto;
background: black;
color: red;
border-radius: 5px 5px 0px 0px;
bottom: 0px;
//right: 270px;
display: inline-block;
}
</style>
<script src="jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular.min.js"></script>
<script>
var app = angular.module('myapp', []);
app.controller('MainCtrl', function($scope) {
$scope.arr = [{
name: "user1",
popStatus: false
},
{
name: "user2",
popStatus: false
},
{
name: "user3",
popStatus: false
},
{
name: "user4",
popStatus: false
}
];
//hideUnhide message box
$scope.hideUnhideIt = function(id){
$scope.hideUnhideId = ($scope.hideUnhideId==id)?-1:id;
}
//pop div
$scope.popIt = function(id) {
if ($scope.arr[id].popStatus == true) {
$scope.arr[id].popStatus = false
} else {
$scope.arr[id].popStatus = true;
}
}
});
</script>
</head>
<body>
<div ng-app="myapp" ng-controller="MainCtrl">
<div class="sidebar">
<ul>
<li ng-repeat='ret in arr track by $index'>
<div ng-click="popIt($index)">
{{ret.name}} <!-- visible:{{ret.popStatus}} --><br><br>
</div>
</li>
</ul>
</div>
<div class='mainArea'>
<ng-controller ng-repeat='ret in arr track by $index'>
<div ng-if="ret.popStatus == true" class="contact_box">
<button style="float:right" ng-click="popIt($index)">Close</button>
<button style="float:left" ng-click="hideUnhideIt($parent.$index)">hide/unhide</button>
<br>
<div ng-if="hideUnhideId!=$index" style="height:auto;">
<b>Username:</b> {{ret.name}}
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
</div>
</div>
</ng-controller>
</div>
</div>
</body>
</html>
最佳答案
您必须对数组中的每个元素保持可见性分数;加上一些 CSS 的东西,这样聊天框就不会相互重叠;全页打开snippet,可以看到相对定位和固定定位的效果;
更新:根据 Nancy 的反馈,隐藏/取消隐藏按钮现在也针对每个单独的聊天窗口进行切换
var app = angular.module('myapp', []);
app.controller('MainCtrl', function($scope) {
$scope.arr = [
{ name: "user1", popStatus: false, hideBox: false },
{ name: "user2", popStatus: false, hideBox: false },
{ name: "user3", popStatus: false, hideBox: false },
{ name: "user4", popStatus: false, hideBox: false }
];
//pop div
$scope.popIt = function(id) {
if ($scope.arr[id].popStatus == true) {
$scope.arr[id].popStatus = false
} else {
$scope.arr[id].popStatus = true;
}
}
//hideUnhide message box
$scope.hideUnhideIt = function(id) {
($scope.arr[id].hideBox == true) ? $scope.arr[id].hideBox = false: $scope.arr[id].hideBox = true;
}
});
.sidebar {
width: 20%;
position: fixed;
height: 100%;
right: 0px;
top: 0px;
padding-top: 50px;
padding-bottom: 10px;
border: 1px solid #b2b2b2;
text-align: bottom;
}
.mainArea {
position: fixed;
width: 80%;
bottom: 0%
}
.contact_box {
position: relative;
bottom: -5px;
width: 250px;
// height:auto;
background: black;
color: red;
border-radius: 5px 5px 0px 0px;
bottom: 0px;
//right: 270px;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.6/angular.min.js"></script>
<div ng-app="myapp" ng-controller="MainCtrl">
<div class="sidebar">
<ul>
<li ng-repeat='ret in arr track by $index'>
<div ng-click="popIt($index)">
{{ret.name}}
<!-- hide:{{ret.hideBox}} -->
<br><br>
</div>
</li>
</ul>
</div>
<div class='mainArea'>
<ng-controller ng-repeat='ret in arr track by $index'>
<div ng-if="ret.popStatus == true" class="contact_box">
<button style="float:right" ng-click="popIt($index)">Close</button>
<button style="float:left" ng-click="hideUnhideIt($parent.$index)">hide/unhide</button>
<br>
<div ng-if="!ret.hideBox" style="height:auto;">
<b>Username:</b> {{ret.name}}
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
<br>Message .........<br>
</div>
</div>
</ng-controller>
</div>
</div>
关于css - Angularjs 消息框仅显示一个文本框,与选择的用户无关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54856541/
假设我们要描述一个满足以下真值表的组合电路: a b | s0 s1 s2 s3 ----------------- 0 0 | 1 d d d 0 1 | 0 1 d d 1 0 |
.mainIDv { height:300px; width:400px; padding:5px; margin: 8px auto 8px auto; } .ImgDisp{
我的 iOS 应用程序遇到了一个恼人的问题。突然,当我启动带有 TableView 的 View Controller 时,出现以下错误: Unrecognized selector sent to
我有一个简单的 PreferenceActivity 类,它的 onCreate 将我的 R.xml.preferences 屏幕传递给 ((PreferenceActivity)super).add
在大学项目范围内,我应该实现数据库的聚合。 我得到了一个实体关系模型,它看起来与此类似: 现在我应该实现一个 SQL 脚本来创建这样的数据库,但我在谷歌或其他任何地方找不到有关此主题的任何内容。在我教
我一直在努力阅读 GCD 并试图弄明白。我读了很多地方,应该始终使用 GCD,如果一个人正在做一些繁重的工作,这会卡住 UI,我确实理解这一点,但是 GCD 也可以仅仅为了性能而使用吗?假设我有一个循
当有人用他们自己的类重载线程时,这个问题似乎已经以一种或另一种形式得到了回答,但是如果只是尝试使用 QTimer 类而不扩展 QThread 类呢?我正在尝试将 QTimer 用于 QT。他们在 上的
在网上看了类似的问题/错误,没有一个对我有帮助... 未处理的拒绝 SequelizeEagerLoadingError:任务未关联到用户! 我的用户路线 router.get('', functio
如果我正在评估两个变量而不是两个方法调用,那么我使用“&&”或“&”是否重要 //some logic that sets bool values boolean X = true; boolean
我们目前正在内部为我们的项目使用 Oracle 10g,这不太可能改变,但最终我们将向其他客户提供此应用程序,我们需要能够提出替代的免费数据库。 那么使 Hibernate 持久层独立于所使用的底层
我的 AsyncTask 类中的 onPostExecute() 方法有问题。 我有一个SignupActivity: public class SignupActivity extends AppC
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我一直在大量关注 sequelize 的文档,但在处理关系时遇到了问题。这是我使用 belongsTo 创建两个非常基本的 1:1 关系的非常简单的代码 import Sequelize, { STR
我希望这与 GMT 无关,否则我会觉得自己很愚蠢。 2 个快速相关的问题。为什么这会转换为不同的日期?正在失去一天。我查看了其他答案中所述的时区,但它始终是 GMT 时区 0000,这正是我所期望的。
我发现了这个问题的很多版本,但似乎都没有比明显的 Google Chrome 错误更进一步。 发生的情况是,每当我将 codeigniter 设置复制到服务器上的新文件夹,以基于它启动新项目时,我在尝
我需要一个与 UI 无关的简单布局管理器。通过这个,我的意思是它不应该指定我想如何在屏幕上表示我的形状/控件。它应该能让我说: 我想要 X 形状。我想要 X 形下的 Y 形。我希望形状 Z 包围 X,
当有一个方法== , 方法 !=被定义为采用该结果并应用 !给它。 (可能还有 =~ 和 !~ 。) 与此不同,>= , 通常表示 >或 == , 实际上独立于 >和 == .这两个定义似乎都不会影响
我在 Ruby Netbeans 6.5.1 中获得了大量(我称之为)无关的自动完成信息。 例如,如果我输入一个模型对象的名称,然后输入一个句点(无论我是在 Controller 中还是在 View
我是 NodeJS 的新手,有 express 和 Sequelize。当我想创建图书租赁时,控制台会提示我“图书与租赁无关”。 当我将表迁移到 sql 数据库时,id 就在它们的位置并且我的播种机正
我有众所周知的错误: implicit declaration of function 'STLINKReadSytemCalls' [-Wimplicit-function-declaration]
我是一名优秀的程序员,十分优秀!