Angular-中止拖放后元素不刷新
Angular-Elements are not refreshing after aborted drag&drop
我有以下 angular-列表(减少了内容以使其更易读):
<div ng-repeat="element in bigBlock.Elements track by $index"
class="singleBlockElement"
ng-drop="dragSource=='Block'"
ng-drop-success="To($index, $data, bigBlock)">
<div class="bbRange"> </div>
<i class="fa {{GetImage(element)}}" />
<div ng-drag="element.ElementType!=='placeholder'"
ng-drag-data="element"
ng-drag-start="Start()"
ng-drag-success="From(element,bigBlock, $index, bigBlock.$index)"
ng-drag-stop="Stop(element, bigBlock, $index, bigBlock.$index)"
class="cutOff">
{{element.Title}}
</div>
<div class="edit ng-show="GetLinkText(element, true)">
<span class="isvisible">
<i title="{{element.Present?'Präsentieren':'Nicht präsentieren'}}" class="fa fa-{{element.Present?'eye':'eye-slash'}}"></i>
</span>
<a href="#" ng-click="Edits.Element(element, true)">{{GetLinkText(element,true)}}</a>
</div>
</div>
这是它的样子:
这是在拖动时:
这就是当我没有像下面描述的那样掉落时的样子:
我现在可以(成功地)将两个元素("Welcome" 和 "Go Away")拖放到该块内,更改这两个元素的顺序。
但是如果我中止 drag/drop。例如拖动 "Welcome" 而不是将其向下移动或将其移动到我无法放下的区域(块外)文本 "Welcome" 消失。
没有错误。下降只是没有发生(如预期的那样),但 Angular 似乎无法重新显示该元素的文本。 ({{element.Title}})
我尝试使用 $apply() 强制刷新,但这并没有改变任何事情(也没有产生错误)。
但是,如果我在页面上执行任何操作(例如单击编辑按钮或任何其他导致事件的操作),日期将再次正确显示。
所以这对我来说似乎是一个刷新问题。
我正在为此使用 ngDraggable (https://github.com/fatlinesofcode/ngDraggable)
(更新:在 Chrome 的 Developer Console 中分析页面源,文本似乎仍然存在,甚至 "should" 可见(显示:块),所以这可能更像是一个浏览器问题 (chrome) 而不是 angular-问题)
这似乎是纯粹的 Browser/CSS-Issue 而不是 Angular-Issue。我通过强制浏览器刷新父容器解决了这个问题:
$('.mm-Right')[0].style.display = 'none';
$('.mm-Right')[0].offsetHeight;
$('.mm-Right')[0].style.display = 'block';
我的结构在哪里
<div class='mm-Right'>
<div class='singleBlockElement>[..]</div>
<div class='singleBlockElement>[..]</div>
<div class='singleBlockElement>[..]</div>
</div>
确实 解决了问题,但看起来像是在欺骗我。我宁愿这个错误甚至不出现而不是隐藏症状。所以我很乐意接受这个问题的任何更好的答案。
我有以下 angular-列表(减少了内容以使其更易读):
<div ng-repeat="element in bigBlock.Elements track by $index"
class="singleBlockElement"
ng-drop="dragSource=='Block'"
ng-drop-success="To($index, $data, bigBlock)">
<div class="bbRange"> </div>
<i class="fa {{GetImage(element)}}" />
<div ng-drag="element.ElementType!=='placeholder'"
ng-drag-data="element"
ng-drag-start="Start()"
ng-drag-success="From(element,bigBlock, $index, bigBlock.$index)"
ng-drag-stop="Stop(element, bigBlock, $index, bigBlock.$index)"
class="cutOff">
{{element.Title}}
</div>
<div class="edit ng-show="GetLinkText(element, true)">
<span class="isvisible">
<i title="{{element.Present?'Präsentieren':'Nicht präsentieren'}}" class="fa fa-{{element.Present?'eye':'eye-slash'}}"></i>
</span>
<a href="#" ng-click="Edits.Element(element, true)">{{GetLinkText(element,true)}}</a>
</div>
</div>
这是它的样子:
我现在可以(成功地)将两个元素("Welcome" 和 "Go Away")拖放到该块内,更改这两个元素的顺序。
但是如果我中止 drag/drop。例如拖动 "Welcome" 而不是将其向下移动或将其移动到我无法放下的区域(块外)文本 "Welcome" 消失。
没有错误。下降只是没有发生(如预期的那样),但 Angular 似乎无法重新显示该元素的文本。 ({{element.Title}})
我尝试使用 $apply() 强制刷新,但这并没有改变任何事情(也没有产生错误)。
但是,如果我在页面上执行任何操作(例如单击编辑按钮或任何其他导致事件的操作),日期将再次正确显示。
所以这对我来说似乎是一个刷新问题。
我正在为此使用 ngDraggable (https://github.com/fatlinesofcode/ngDraggable)
(更新:在 Chrome 的 Developer Console 中分析页面源,文本似乎仍然存在,甚至 "should" 可见(显示:块),所以这可能更像是一个浏览器问题 (chrome) 而不是 angular-问题)
这似乎是纯粹的 Browser/CSS-Issue 而不是 Angular-Issue。我通过强制浏览器刷新父容器解决了这个问题:
$('.mm-Right')[0].style.display = 'none';
$('.mm-Right')[0].offsetHeight;
$('.mm-Right')[0].style.display = 'block';
我的结构在哪里
<div class='mm-Right'>
<div class='singleBlockElement>[..]</div>
<div class='singleBlockElement>[..]</div>
<div class='singleBlockElement>[..]</div>
</div>
确实 解决了问题,但看起来像是在欺骗我。我宁愿这个错误甚至不出现而不是隐藏症状。所以我很乐意接受这个问题的任何更好的答案。