По сути, я пытаюсь воссоздать ng-change, но добавляю в него некоторую задержку (автоматическое сохранение при тайм-ауте частоты изменения).
Пока у меня есть следующая директива:
myApp.directive('changeDelay', ['$timeout', function ($timeout) {
return {
restrict: 'A',
require: 'ngModel',
scope: {
callBack: '=changeDelay'
},
link: function (scope, elem, attrs, ngModel) {
var firstRun = true;
scope.timeoutHandle = null;
scope.$watch(function () {
return ngModel.$modelValue;
}, function (nv, ov) {
console.log(firstRun);
if (!firstRun) {
console.log(nv);
if (scope.timeoutHandle) {
$timeout.cancel($scope.timeoutHandle);
}
scope.timeoutHandle = $timeout(function () {
//How can I pass person??
scope.callBack();
}, 500);
}
firstRun = false;
});
}
};
}]);
Со следующим контроллером:
myApp.controller('MyCtrl', ['$scope', function ($scope) {
$scope.people = [{
name: "Matthew",
age: 20
}, {
name: "Mark",
age: 15
}, {
name: "Luke",
age: 30
}, {
name: "John",
age: 42
}];
$scope.updatePerson = function (person) {
//console.log("Fire off request to update:");
//How can I get person here??
//console.log(person);
};
}]);
И эта разметка должна определять, какой метод области действия контроллера вызывать, а также объект, который ему передается:
<div ng-app='myApp'>
<div ng-controller="MyCtrl">
<div ng-repeat="person in people">
<input type="text" ng-model="person.name" change-delay="updatePerson(person)" />
</div>
</div>
</div>
Вот неисправная скрипка: http://jsfiddle.net/Troop4Christ/fA4XJ/
Как видите, я не могу понять, как вызвать параметр атрибута директивы с переданным ему параметром «человек».
Итак, как я уже сказал, в начале ... просто пытаюсь воссоздать ng-change с некоторыми «настройками». Как это делается в ng-change? то есть