2013-11-24 4 views
2

Я хочу создать директиву в качестве атрибута, где я хочу присоединить автосохранение к другим директивам. Я подумал о создании директивы, которая передает часы на атрибут (модель). Функция debounce от lodash и предотвращает выполнение при каждом нажатии клавиши. Метод put - это результирующая модель.Создание директивы autosave в angularjs

Моя идея до сих пор

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 модели, но я нету получил сферу там. Как добавить эту функцию автосохранения правильно? Мне нужно определить, какой объект в области будет просматриваться, и прикрепить к нему часы, чтобы я получал обновления об изменениях.

Edit: Создано plunker показывает идею:

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

Я попытался установить рамки на обеих директив и получил сообщение об ошибке, что не допускается. (что-то вроде двух изолированных областей не допускается)

Могу ли я создать изолированную область действия в директиве атрибута?

В принципе мне нужно пройти в модели с директивой автосохранения

+2

1. Вы можете создать plunkr, который показывает, что это не работает? Изменить: 2. Является ли первый параметр функцией $ watch функцией либо быть строкой, где выражение равно $ eval-uated или функции? –

+0

создал плункер, может быть, его только маленькая вещь – pfried

ответ

2

Вы должны переместить 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.

+0

отлично работает, кроме того, я проверяю, существует ли идентификатор на старой модели, потому что иначе он будет срабатывать при загрузке модели – pfried

Смежные вопросы