AngularJS アプリの設計に欠陥があると思います。
モデル アイテムの 1 つと、それらの追加/削除に関連するメソッドを含むサービスがあります。このサービスはコア アプリとディレクティブに挿入されます。私の問題は、モデル内のアイテムをディレクティブから削除することです。これを行っているのは、ディレクティブが各モデル アイテムを物理的に表しているためです。変更は行われていますが、モデルを公開するコア アプリに戻ることはありません。これは、更新するように指示していないためだと思いますが、私の問題は、更新方法がよくわからないことです。サービスを呼び出した後にディレクティブを追加する$apply
と、適用が既に進行中であるというエラーが発生するため、これは間違ったアプローチのように感じます。
アプリ全体でこのデータの単一インスタンスのみが必要なため、モデルをサービスに入れました。
これを達成するためのより良い方法を提案できる人はいますか? モデルをサービスに保存することは良い考えですか?
サービス:
angular.module("App").service("widgetService", function () {
this.widgets = [];
this.removeWidget = function() {
<!-- remove item from this.widgets -->
}
this.getWidgets = function() {
return this.widgets;
}
this.setWidgets = function(widgets) {
this.widgets = widgets;
)
}
コアアプリ:
App.controller("CoreAppController", function($scope, $http, widgetService) {
$scope.widgets = widgetService.getWidgets();
}
HTML:
<widget data-ng-repeat="widget in widgets" />
指令:
myKSS.MyKSSApp.directive("widget", function($compile) {
return {
restrict: "E",
replace: true,
templateUrl: "partials/Widget.html",
scope: {
},
controller: function($scope, $element, $attrs, widgetService) {
$scope.removeWidget = function() {
widgetService.removeWidget();
};
}
}
}