1

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();
            };
        }
    }
}
4

1 に答える 1

0

私が気付いたことが1つあります。widgetsサービスの変数の値を変更する可能性を与えるべきではありません-そうしないと、追加/削除を追跡できませんでした(つまりthis.setWidgets、サービスの方法を削除する必要があります)

他のすべてが機能するはずです (その他の小さな変更を加えて): http://plnkr.co/edit/fQMwfI5d7nikjhXTXSC6?p=preview

于 2013-02-05T14:39:23.627 に答える