2

自動保存機能を他のディレクティブにアタッチする属性としてディレクティブを作成したいと考えています。渡された属性 (モデル) を監視するディレクティブを作成することを考えました。debounce 関数は lodash からのもので、各キーストロークでの実行を防ぎます。put メソッドは resangular モデルからのものです。

これまでの私の考え

angular.module('myApp.directives', []).directive('autosave',[ function () {
    'use strict';

    function autosaveController($scope) {

        function saveModel(newModel, oldModel) {
            if(newModel !== oldModel && newModel.put) {
                $scope.model.put();
            }
        }

        $scope.$watch($scope.model, _.debounce(saveModel, 5000), true);
    }

return {

    restrict : 'A',

    controller: ['$scope', function($scope) {
        return autosaveController($scope);
    }],

    scope : {
        model : '='
    }

};

}]);

しかし、私はこれを機能させませんでした。それから、これを私の再角化モデルに入れるほうがよいと思いましたが、そこにはスコープがありません。この自動保存機能を適切に追加するにはどうすればよいですか? スコープ内のどのオブジェクトが監視されるかを定義し、それに監視をアタッチして、変更に関する更新を取得できるようにする必要があります。

編集:アイデアを示すプランカーを作成しました:

http://plnkr.co/edit/I8GK8zHV8fOXY0zMa1AL?p=preview

両方のディレクティブにスコープを設定しようとしましたが、これは許可されていないというエラーが発生しました。(2 つの独立したスコープのようなものは許可されません)

属性ディレクティブで分離スコープを作成できますか?

基本的に、モデルを自動保存ディレクティブに渡す必要があります

4

1 に答える 1

4

のスコープが のスコープの子になるようautosaveに、ディレクティブをディレクティブ内に移動する必要があります。その逆ではありません。carautosavecar

また、パラメータを に渡すには、 ではなく属性 ( )autosaveを使用する必要があります。$attrs$scope

そう<div class="car" autosave model="car">

app.directive('autosave',[ function () {
    'use strict';

    function autosaveController($scope, $emelent, $attrs) {

        function saveModel(newModel, oldModel) {
           //...
        }

        $scope.$watch($attrs.model, _.debounce(saveModel, 5000), true);
    }

return {
    restrict : 'A',
    link: autosaveController
}

これが変更された plunkr です。

于 2013-11-24T10:46:13.507 に答える