我不太确定标题是最好的描述,但我想知道如果我在Angular摘要循环之外发生了一些事件,触发摘要循环,最好的方法是什么?在我正在处理的应用程序中,我正在使用Socket.io来从网络中的其他应用程序来回传递数据.Socket.io中有一些事件可用于更新当前Controllers $范围内的模型.在发生摘要循环之前,这些更改不会反映在UI中.我不希望调用$ scope.$ apply()以防止遇到Angular已经处于循环中的问题.
我知道我可以使用$ timeout()并将我的函数放在那里并将超时设置为0秒.这就是我目前使用的,它工作正常,但我想知道这是否是最好的方法?
示例JS
var app = angular.module('MyApp',[]);
var socket = io.connect('http://localhost:3000');
app.controller('MyAppController',['$scope',function($scope) {
$scope.connections = 0;
socket.on('connect',function(sock) {
sock.on('event',function() {
$scope.connections++;
};
};
}]);
Run Code Online (Sandbox Code Playgroud)
示例HTML
<!DOCTYPE html>
<html lang="en" ng-app="MyApp">
<head></head>
<body ng-controller="MyAppController">
<p>Connections: {{connections}}</p>
<script src="angular.min.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
显然,这是一个非常简单的,尽可能基本的例子.它不是正在使用的ACTUAL代码,但代表了同样的问题.当从socket.io引发事件时,$ scope.connections变量会递增但是UI不反映更改,直到其他东西触发摘要循环,$ scope.$ apply()被调用,或者我使用$ timeout ().
再一次,我有适用的代码,只是想知道最好的方法是什么.
谢谢
mongoose 是否可以创建一个架构,将其命名为 Folders 并且它在被调用的子文件夹中有一个属性,它是一个嵌套的 Folder 子文档数组?
const mongoose = require('mongoose')
let SubSchema = mongoose.Schema({
name: { type: String, required: true }
})
let FolderSchema = mongoose.Schema({
name: { type: String, required: true },
children: [ SubSchema ]
})
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过引用另一个类似于上面显示的模式将子文档嵌套在数组中。不过,我想要做的是在其内部重用 FolderSchema。显然这会导致问题,因为在创建架构时,FolderSchema 不存在。有一个更好的方法吗?有没有办法使用相同的模式递归嵌套文档?
我知道我可以让数组成为引用集合的 ObjectId 列表,但我希望将它全部嵌套为文档。我想如果我确实 populate() 让它解析文档 ID,那本质上是一样的。只是想知道是否还有另一种我不知道的方法。