我想创建一个指令作为属性,我想将自动保存功能附加到其他指令。我考虑过创建一个指令来监视传入的属性(模型)。去抖函数来自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
我试图在两个指令上设置一个范围,并得到一个错误,这是不允许的。 (不允许两个孤立的范围)
我可以在属性指令上创建一个独立的范围吗?
基本上我需要将模型传递给自动保存指令
答案 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
}