내 페이지에는 배열에 개체를 추가하는 형식이 있습니다. 배열 항목을 편집 할 수있는 링크가있는 페이지에 배열이 표시됩니다.AngularJS 편집 레코드 작동이 작동하지 않습니다.
항목을 추가 할 때 삭제 된 배열 색인이 변경된 경우 나중에 해당 항목을 편집 할 수 있도록 기본 키를 첨부합니다.
추가 기능이 작동하지만 편집 동작이 아닙니다. 양식 컨트롤이 바인딩 된 ng 모델을 업데이트하면 양식을 편집 할 레코드가 표시되지 않습니다. 그것은 $ 범위 문제 일지 모르지만 나는 이것을 달성하기 위해 특별히 부모 $ scope에서 모델을 선언했습니다. http://plnkr.co/edit/yDlPpFunxFLHPiI0kCdj?p=preview
<form ng-controller="formCtrl" novalidate ng-submit="submit()">
<input type="text" name="name" ng-model="student.name" placeholder="name">
<input type="number" name="age" ng-model="student.age" placeholder="age">
<input type="hidden" ng-value="pk">
<input type="submit">
</form>
<h1>students</h1>
<ul>
<li ng-repeat="item in students"><a href="#" ng-click="editStudent(item.pk)">{{item.name}}</a> - {{item.age}}</li>
</ul>
var myApp = angular.module('myApp',[]);
myApp.controller("myCtrl", ['$scope', function($scope){
$scope.student = {};
$scope.pk = 1;
$scope.index = 0;
$scope.students = [];
$scope.editStudent = function (id) {
for (var i = 0; i < $scope.students.length; i++) {
console.log("comparing "+$scope.students[i].pk+ " & " + id);
if ($scope.students[i].pk == id) {
console.log("editing pk nr.: "+ id);
$scope.student = {
name: $scope.students[i].name,
age: $scope.students[i].age
};
$scope.index = id;
}
}
};
}]);
myApp.controller("formCtrl", ['$scope', function($scope) {
$scope.submit = function() {
if ($scope.index === 0) {
$scope.students.push({
name: $scope.student.name,
age: $scope.student.age,
pk: $scope.pk
});
$scope.pk++;
$scope.student = {};
} else {
for (var i = 0; i < $scope.students.length; i++) {
if ($scope.students[i].pk == $scope.index) {
$scope.students[i] = {
name: $scope.student.name,
age: $scope.student.age,
pk: $scope.index
};
}
}
$scope.index = 0;
}
};
}]);
감사
컨트롤러간에 데이터를 공유하기 위해 서비스를 만드는 데 필요한 잘못된 방식으로이 작업을 수행하고 있습니다. – squiroid
실제로 범위 지정 문제입니다. 두 개의 서로 다른 컨트롤러를 사용하여 각 '$ scope'$ – kasoban
을 생성하지만 하위보기 (양식)는 상위 컨트롤러의 요소에 바인딩되어 있으며 삽입과 함께 작동합니다. 다른 방향으로 작동하지 않는 이유는 무엇입니까? – Patriot