私は基本的に 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/
ご覧のとおり、「person」パラメーターを渡してディレクティブ属性パラメーターを呼び出す方法がわかりません。
私が言ったように、最初に..「微調整」を加えてng-changeを再作成しようとしています。これはng-changeでどのように行われますか? すなわち