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)解雇我的活动&#34; toggle-agents&#34; 3)订阅者捕获我的事件(重新计算高度) 4)深入了解Aurelia ObserverLocator在DOM和高度变化中更新我的(可见属性)。
我需要: 1)this.current.children [i] .visible = false(当节点崩溃时) 2)深入Aurelia ObserverLocator更新我的(可见属性)DOM和高度变化。 3)解雇我的自定义事件。 4)订阅者捕获我的事件并在高度内容实际发生变化时重新计算高度。
答案 0 :(得分:2)
在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应用程序永远不需要这种东西。如果您要强制更新特定绑定,则可以使用signal
绑定行为:
<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'
}
}
如果可以的话,尽量远离这两种技巧。如果您将此用于除基于时间的绑定(绑定到使用Date.now()
或new Date()
的内容)或国际化语言环境更改事件之外的其他内容...您可能不会这样做&#34; Aurelia方式&#34;。