ダーツコードを考えると
class LandingController {
bool hideDiv = false;
void doit() {
new JsObject(context['loginControls']).callMethod('fadeLogin', [() {
print(hideDiv);
hideDiv = true;
print(hideDiv);
print("WTF");
}]);
}
}
JSを呼び出します:
var loginControls = function() {
this.fadeLogin = function(func) {
$('#landingHeader').animate({ opacity: 0 }, 500, func);
}
};
ビューに影響を与えるはずです:
<button ng-click="doit();">Click</button>
<div id="landingHeader">Hide me after button click</div>
<div ng-if="ctrl.hideDiv == false"><img src="assets/img/ajax-loader-small.gif">Waiting for div to disappear...</div>
ボタンのクリックと 500 ミリ秒の遅延の後、コンソールに "WTF" が正しく表示されます。div
ただし、 は引き続き表示されます。ユーザー アクションが発生すると (私の場合はマウス クリック)、div
魔法のように消えます。コントローラーの値が変更されたように見えますが、匿名のコールバックでコントローラーの値を出力したため、ブラウザーは div を非表示にする変更を受け取りません。
回避策がありますが、呼び出し後に JavaScript で使用するのと同じフェード時間に Dart タイマーを設定しJsObject
、それらのタイマー コールバックでコントローラーの値を設定する必要があります。