小编ins*_*hex的帖子

销毁使用Renderer2创建的元素的正确方法是什么?

在我们的代码库中,我们有一个虚拟重复指令,它使用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动态创建的节点的正确方法是什么?

angular

7
推荐指数
2
解决办法
8353
查看次数

Spring Stamp over websocket SubscribeMapping 不起作用

我正在尝试在 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)

spring stomp websocket kotlin

2
推荐指数
1
解决办法
3890
查看次数

SwiftUI ForEach 在数组更改时不迭代。列表为空并且 ForEach 确实运行

我正在尝试将 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 …

swift swiftui

1
推荐指数
1
解决办法
5262
查看次数

标签 统计

angular ×1

kotlin ×1

spring ×1

stomp ×1

swift ×1

swiftui ×1

websocket ×1