angularFireを使用してFirebaseから同期/フェッチされたデータを使用してDOMを構築しています。すべての DOM 要素は、次の単純なディレクティブで構築されます。
angular.module('App')
.directive('acmsElement', function () {
return {
template: '<div ng-transclude></div> ',
restrict: 'E',
scope: {elem: '='},
transclude: true,
replace: true,
link: function postLink(scope, element, attrs) {
var el = angular.element(scope.elem.tag);
if(scope.elem.content){
el.text(scope.elem.content);
}
if(scope.elem.attributes) {
el.attr(scope.elem.attributes);
}
element.append(el);
}
};
});
すべての要素は、ng-repeat を使用して Web サイト上で順番にレンダリングされ、すべての要素/モデルはテキストエリアで編集可能になります。
<div ng-repeat="el in elems">
<acms-element elem="el">
<textarea style="width: 100%" ng-model="el.content"></textarea>
</acms-element>
</div>
Firebase では、ノードは配列として格納されるため、ng-repeat を使用して正しい順序で表示するのは簡単です。上記のテキストエリアにバインドされたモデルを編集しようとすると、問題が発生します.ng-は、キーストロークごとにその作業を繰り返します。これにより、テキスト領域へのフォーカスが失われ、ページがレンダリングされるときにちらつきます。最も厄介なことに、ページが再生成される前に一度に 1 文字しか入力できません。問題に取り組む方法がわからない。
時間をありがとう、
ジャレッド