2

我想创建一个指令作为我想将自动保存功能附加到其他指令的属性。我考虑过创建一个指令来监视传入的属性(模型)。去抖动功能来自 lodash,并防止每次击键时执行。put 方法来自 restangular 模型。

到目前为止我的想法

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 : '='
    }

};

}]);

但是我没有让这个工作,然后我想我最好把它放在我的restangular模型中,但我还没有找到范围。如何正确添加此自动保存功能?我需要能够定义范围内的哪个对象将被监视并将监视附加到它,以便我获得更改的更新。

编辑:创建了一个显示想法的 plunker:

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

我试图在两个指令上设置一个范围,并得到一个错误,这是不允许的。(不允许使用两个孤立的范围)

我可以在属性指令上创建一个隔离范围吗?

基本上我需要将模型传递给自动保存指令

4

1 回答 1

4

您必须在autosave指令内移动指令car,以便范围autosave是范围的子级car,而不是相反。

此外,为了向您传递参数,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 回答