在我们的代码库中,我们有一个虚拟重复指令,它使用Renderer2来创建一个这样的div:
this.renderer2.createElement('div');
Run Code Online (Sandbox Code Playgroud)
在ngOnDestroy方法中,我们像这样销毁它:
this.renderer.destroyNode(this.offsetBeforeEl);
Run Code Online (Sandbox Code Playgroud)
这工作正常,我们没有问题,直到我们在prod模式下构建应用程序,我们开始收到以下错误:
main.js?d73b003…:formatted:87193 Uncaught (in promise) TypeError: this.renderer.destroyNode is not a function
Run Code Online (Sandbox Code Playgroud)
我在该行添加了一个断点,发现实际上destroyNode不是Renderer2上的方法.我去了angular的源代码,并在抽象类定义中找到了方法上方的注释:
/**
* This property is allowed to be null / undefined,
* in which case the view engine won't call it.
* This is used as a performance optimization for production mode.
*/
destroyNode: ((node: any) => void)|null;
Run Code Online (Sandbox Code Playgroud)
所以我检查了视图的代码并看到了这个:
if (view.renderer.destroyNode) {
destroyViewNodes(view);
}
if (isComponentView(view)) {
view.renderer.destroy();
}
Run Code Online (Sandbox Code Playgroud)
如果我不能依赖现有的方法,那么破坏使用Renderer2动态创建的节点的正确方法是什么?
我正在尝试在 Spring Boot 应用程序中配置订阅映射以通过 websockets 进行踩踏,但没有任何运气。我相当确定我已经正确配置了 stomp/websocket 内容,因为我能够订阅 kafka 消费者发布的主题,但使用 @SubscribeMapping 根本不起作用。
这是我的控制器
@Controller
class TestController {
@SubscribeMapping("/topic/test")
fun testMapping(): String {
return "THIS IS A TEST"
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的配置
@Configuration
@EnableWebSocketMessageBroker
@Order(Ordered.HIGHEST_PRECEDENCE + 99)
class WebSocketConfig : AbstractWebSocketMessageBrokerConfigurer() {
override fun configureMessageBroker(config: MessageBrokerRegistry) {
config.setApplicationDestinationPrefixes("/app", "/topic")
config.enableSimpleBroker("/queue", "/topic")
config.setUserDestinationPrefix("/user")
}
override fun registerStompEndpoints(registry:StompEndpointRegistry) {
registry.addEndpoint("/ws").setAllowedOrigins("*")
}
override fun configureClientInboundChannel(registration: ChannelRegistration?) {
registration?.setInterceptors(object: ChannelInterceptorAdapter() {
override fun preSend(message: Message<*>, channel: MessageChannel): Message<*> {
val accessor: StompHeaderAccessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor::class.java)
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 MultiPeer Connectivity 框架与 swift ui 一起使用,并且在我看来使用 ForEach 时遇到了问题。我有一个单例,用于跟踪数组中的连接用户:
class MPCManager: NSObject {
static let instance = MPCManager()
var devices: [Device] = []
...
Run Code Online (Sandbox Code Playgroud)
我的设备类:
class Device: NSObject {
let peerID: MCPeerID
var session: MCSession?
var name: String
var state = MCSessionState.notConnected
var lastMessageReceived: Message?
...
}
Run Code Online (Sandbox Code Playgroud)
当 MultiPeer 连接帧找到新的对等点时,MPCManager 将新设备附加到阵列。我已经在调试器中确认了这一点。当我尝试在列表中显示设备时出现问题。这是我正在使用的代码:
struct ContentView : View {
var devices: [Device] = MPCManager.instance.devices
var body: some View {
List {
ForEach(self.devices.identified(by: \.name)) { device in
Text(device.name)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当应用程序启动时,列表会显示,但它是空的。当我在 ForEach …