- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AngularJS 1.2.0 通过 websocket 创建一个简单的消息应用程序。 HTML 在列表上使用 ng-repeat 来生成总输出(我正在输入的消息数组)。我使用工厂来托管“私有(private)”数据和方法,并仅公开 View 模型和函数来操作 Controller 中的数据:
<form class="form-search">
<input type="text" ng-model="model.input" class="input-large"
placeholder="Enter your message:">
<button type="submit" class="btn" ng-click="sendMessage()">Send</button>
</form>
<ul>
<li ng-repeat="message in model.output track by $index" ng-bind="message"></li>
</ul>
application.controller('MessageCtrl', ['$scope', 'MessageService', function($scope, Service) {
$scope['model'] = Service.view;
$scope.sendMessage = function() {
Service.sendMessage();
};
$scope.$watchCollection(function() {
return Service['view'];
}, function(data) {
$scope['model'] = data;
});
}])
.factory('MessageService', function('Restangular') {
var Service = {
// other private properties
view: {
input: null,
output: []
}
};
openConnection();
function openConnection() {
// retrieves websocket URL over Restangular
// opens websocket
}
function sendMessage() {
// sends input over socket
// promises are resolved and unshifted onto Service['view']['output'].
}
return {
view: Service['view'],
sendMessage: function() {
sendMessage();
}
}
});
一切正常,除了当 Service['view'] 中的输出数组收到新消息时 DOM 的 ng-repeat 没有更新。我尝试使用 $watchCollection 作为此线程中的解决方案: AngularJS : The correct way of binding to a service properties ,但这也行不通。让 DOM 重新渲染的唯一方法是通过更改输入文本或触发 CSS 中的悬停状态来强制其重新渲染。
考虑到这种设置,触发摘要的最佳方法是什么,以便一旦用新消息数据解决了 Promise 并不转移到输出数组上,DOM 就会呈现?我想避免使用 $rootScope 和触发事件,因为当其他 Controller 使用工厂时,这会变得非常不干净。
最佳答案
在服务中,我添加了 $rootScope 依赖项并使用 $rootScope.$apply() 来解决 promise 并更新模型。
$rootScope.$apply(function() {
Service['view']['output'].unshift(newMessage)
});
这似乎解决了摘要问题,尽管我不确定副作用是什么。
关于javascript - 强制 DOM 在更改对工厂模型的 $scope 模型引用时进行渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149749/
我正在尝试获取有关某个特定人员的最新信息,并且我正在使用类似的查询 SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID DESC LIMIT
我有一个视频 View ,正在播放视频。我想停止视频并在触摸视频 View 时返回。我想我必须这样做。 videoView.setOnTouchListener(new OnTo
假设您正在为某种目的(例如数据结构)制作一个经过严格测试的相当健壮的 API。其他人将在他们自己的编码项目中下载和使用您的库,因此您希望它非常密封。 在您的 API 中,您有许多这样的函数调用: vo
想知道是否有办法可以在没有构造函数的情况下渲染组件。 下面是我的 onClick 代码。我的目标是当您单击按钮时进行渲染以使按钮消失。我不确定是否有办法在不创建的情况下渲染它 constructor
我目前正在这样做。 有更好的方法吗? public Cursor selectRostersForTeam(Activity activity, int teamId) { final Str
我们遇到了遗留代码的问题。有一个“用户名”字段的验证集,验证它的长度并确保它至少包含一个字母: @Column(name = "username") @Size(min = 4, max = 40)
所以我有一个通过 .fetch() 填充的模型,我的问题是。它要么总是 PUT,要么总是 POST,但 .save() 永远不会表现得“智能”。 该模型是通过提取填充的,如果从提取返回任何内容,它最多
到目前为止,我已经能够为 Azure Functions 设置单元测试并且效果很好。但是对于我当前的项目,我需要使用动态或命令式绑定(bind)。 https://learn.microsoft.co
我有一个很大的本地文件。我想使用 boto 库将该文件的 gzip 版本上传到 S3。该文件太大,无法在上传前将其有效地 gzip 到磁盘上,因此应在上传期间以流式方式 gzip。 boto 库知道一
我正在使用 python 的 slumber 库对服务进行 HTTP 调用。这就是它的样子。我需要对此 URL https://sample-billing-api.test/2/billing-ac
使用 manifest v2 可以正常工作。但是使用 manifest v3 我收到错误“ReferenceError: localStorage is not defined” manifest.j
我是一名优秀的程序员,十分优秀!