したがって、基本的には、ng-repeat
を使用してビューにデータをロードしています。ドラッグアンドドロップが発生すると、ディレクティブを使用して項目をあるグループから別のグループに移動します。ディレクティブは、サービス内のmove関数を呼び出し、リスト変数を更新します。サービス変数が角型で更新されるとウォッチは発生しません
私の問題は、アイテムを移動すると、ng-repeat
が更新されないということです。私は$scope.$watch
を使ってみましたが、運がありませんでした。サービスリスト変数が更新されていますが、何らかの理由で時計がトリガされていません。私はbroadcast
を使ってみましたが、これはうまくいきましたが、コントローラでブロードキャストを使うのは悪い習慣だと読んだことがあります。
ng-repeat
を更新する最も良い方法は何ですか?それがなぜ機能していないのか分かりません。詳細が必要な場合は、私にお知らせください。
これは、これは私のコントローラ
function MyController($scope, DataService) {
var vm = this;
vm.list = DataService.get();
$scope.$watch(function() {
return DataService.get();
}, function(value) {
console.log('Wtatching');
console.log(value);
}, true);
}
マイビュー
<div ng-repeat="item in vm.list track by $index">
<div class="group" droppable group="<% $index %>">
<div class="group-title">
<% group.title %>
</div>
<div class="group-content">
<div ng-repeat="item in item.items track by $index">
<div class="group-item">
<div class="group-item-title"
draggable
group="<% $parent.$index %>"
item="<% $index %>">
<% item.title %>
</div>
</div>
</div>
</div>
</div>
</div>
EDIT
である私のサービスangular.module('Data', [])
.factory('DataService', DataService);
function DataService() {
var list = [];
list.push({
id: 6,
title: "First Group",
items: [
{
id: 1,
title: "This is an item"
}
]
});
list.push({
id: 7,
title: "Testng",
items: [
]
});
return {
'get': get,
'move': move,
};
function get() {
return list;
}
function move(index, fromItemIndex, toItemIndex) {
list[fromItemIndex].items.push({
id: 5,
title: "This is an item"
});
}
}
ですここにplnkerバージョンがあります:https://plnkr.co/edit/bQuotNU7oOm92PCgmhcj
アイテム1をドラッグしてそれ自身にドロップすると、サービスリストは更新されていますが、ウォッチはトリガーされません。
plunke r/fiddleは素晴らしい追加です。 –
<% %>とはどのような構文ですか? {{}} –
@Beardslapperが補間記号を変更したようです。https://docs.angularjs.org/api/ng/provider/$interpolateProvider –