在angularjs中创建自动保存指令

时间:2013-11-24 09:15:51

标签: angularjs angularjs-directive restangular

我想创建一个指令作为属性,我想将自动保存功能附加到其他指令。我考虑过创建一个指令来监视传入的属性(模型)。去抖函数来自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模型,但我没有在那里的范围。如何正确添加此自动保存功能?我需要能够定义范围中的哪个对象将被监视并附加一个监视器,以便我获得有关更改的更新。

编辑:创建了一个显示这个想法的傻瓜:

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

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

我可以在属性指令上创建一个独立的范围吗?

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

1 个答案:

答案 0 :(得分: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
}

Here is the modified plunkr.