gpt4 book ai didi

javascript - Aurelia 中的类似物 $apply 或 $digest(Angular)

转载 作者:行者123 更新时间:2023-11-30 15:55:27 25 4
gpt4 key购买 nike

Aurelia 中是否有任何类似函数 $apply 或 $digest ?如何立即调用改变bindingValue?

我的情况:我有树(每个节点包含项目列表,屏幕 1)。我有父组件(名称:树)和节点组件(名称:节点)。每个节点都有一个切换按钮。当我切换我的项目时,父组件应该知道如何更改内容高度。

toggleNode(event) {
for (var i = 0, length = this.current.children.length; i < length; i++) {
this.current.children[i].visible = !this.current.children[i].visible;
}
//some code
this.evAggregator.publish("toggle-agents", event);
}

查看:

<ol show.bind="current.visible">//Some markup</ol>         

我的父组件捕获此事件并检查内容大小:

@autoinject
export class Agents {
constructor(private evAggregator: EventAggregator) {
this.toggleAgentsSubscriber = this.evAggregator.subscribe("toggle- agents", (e) => {
//some code for recalculate content height
});
}

现在代码执行: 1) this.current.children[i].visible = false(节点折叠时) 2)触发我的事件“toggle-agents” 3)订阅者捕获我的事件(重新计算高度) 4) 深入 Aurelia ObserverLocator 更新我在 DOM 中的(可见属性)和高度变化。

我需要: 1) this.current.children[i].visible = false(节点折叠时) 2) 深入 Aurelia ObserverLocator 更新我在 DOM 中的(可见属性)和高度变化。 3)触发我的自定义事件。 4) 订阅者捕获我的事件并在高度内容实际发生变化时重新计算高度。

最佳答案

在 Aurelia 中,大部分更改会立即应用。 Aurelia 仅对计算属性(具有 getter 函数的属性)使用脏检查。如果你想手动调用脏检查,你可以这样做:

import {DirtyChecker} from 'aurelia-binding';
import {inject} from 'aurelia-dependency-injection';

@inject(DirtyChecker)
export class Foo {
constructor(dirtyChecker) {
dirtyChecker.check(); // force an application-wide dirty check
}
}

在实践中,Aurelia 应用程序永远不需要这种东西。如果您有想要强制更新的特定绑定(bind),您可以使用 signal 绑定(bind)行为:

<template>
<label>${foo & signal:'my signal name'}</label>
</template>
import {BindingSignaler} from 'aurelia-templating-resources';
import {inject} from 'aurelia-dependency-injection';

@inject(BindingSignaler)
export class Foo {
constructor(signaler) {
signaler.signal('my signal name'); // evaluate any bindings with 'my signal name'
}
}

如果可以,尽量远离这两种技术。如果您将此用于基于时间的绑定(bind)(绑定(bind)到使用 Date.now()new Date() 的对象)或国际化语言环境已更改事件...您可能没有按照“Aurelia 方式”进行操作。

关于javascript - Aurelia 中的类似物 $apply 或 $digest(Angular),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38634566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com