Я получаю $scope.persons
из серверной части. Я перечисляю это, используя ng-repeat
.
Почему в моем случае массив не будет изменен при вызове $scope.openDeleteModal
?
Функция вызывается, но с $scope.persons.
ничего не происходит. Почему?
application.controller('listPersonController', function ($scope, personService) {
personService.getPersons()
.then(function(persons) {
$scope.persons = persons;
});
$scope.openDeleteModal = function (personId, firstname, lastname, index) {
console.log("click " + $scope.persons.length);
$scope.persons.splice();
console.log("click " + $scope.persons.length);
};
});
Изменить:
Хорошо, я забыл о сплайсинге. Я использую это вместо
$scope.openDeleteModal = function (personId, firstname, lastname, index) {
console.log("click " + $scope.persons.length);
$scope.persons = [];
console.log("click " + $scope.persons.length);
};
Первый регистрирует 3. Второй 0. Но я не вижу никаких изменений в области видимости (ng-repeat).
HTML:
<tbody>
<tr ng-repeat="p in persons">
<td>{{p.firstname}}</td>
<td>{{p.lastname}}</td>
<td><a href="#/register_person/{{p.id}}" class="tiny button radius" >Edit</a></td>
<td>
<a href="#"
ng-click="openDeleteModal(p.id, p.firstname, p.lastname, $index)"
class="tiny button alert radius">Delete</a>
</td>
</tr>
</tbody>
Обслуживание:
personService.getPersons = function($scope){
var promise = $http.get("rest/person").then(function (response) {
return response.data;
});
return promise;
};
Вот что {{persons}}
просто под контроллером дает
[{"id":"5331c6f33004e1c8a26492a8","имя":"Карл","фамилия":"Свенссон"},{"id":"5331dfdb3004e1c8a26492ad","имя":"Дженни","фамилия":"Бертилссон "},{"id":"5331ee4e3004e1c8a26492ae","имя":"Босс","фамилия":"Густавссон"}]
Это также не меняется, когда я изменяю область действия
Изменить Попытка еще больше упростить материал.
application.controller('listPersonController', function ($scope, personService) {
var personsList = [{"id":"5331dfdb3004e1c8a26492ad","firstname":"Johnny","lastname":"Bravo"}];
$scope.persons = personsList;
$scope.openDeleteModal = function (personId, firstname, lastname, index) {
console.log("click " + $scope.persons.length);
$scope.persons.length = 0;
personsList.length = 0;
console.log("click " + $scope.persons.length);
};
});
Изменить: HTML стал очень простым.
<div class="row" ng-controller="listPersonController" >
<p ng-repeat="p in persons">{{p.firstname}} <a href="#" class="tiny button alert radius" ng-click="openDeleteModal(p.id, p.firstname, p.lastname, $index)" >Delete</a></p>
</div>
Еще проще. На моей странице значение var
равно 3, и оно не обновляется при нажатии.
application.controller('listPersonController', function ($scope, personService) {
$scope.var = "1";
$scope.openDeleteModal = function () {
$scope.var = "2";
};
$scope.var = "3";
});
Изменить: код работает должным образом при перемещении из ng-view
. Почему это происходит?
splice
не принимает 2 аргумента?.splice(index, 1)
- person tymeJV   schedule 26.03.2014$scope.apply()
в конце метода - person tymeJV   schedule 26.03.2014window.myScope = $scope;
в контроллере, чтобы я мог получить доступ ко всему в области с помощью инструментов отладки Chrome, вторая — отображать некоторые элементы<h1>{ $id }</h1>
, чтобы увидеть, какой идентификатор области находится в данном элементе dom, а затем сравните это с идентификатором области, прикрепленной к свойствуwindow.myScope.$id
. - person BenCr   schedule 26.03.2014