У меня есть функция create в службе, которая отвечает за ввод входных данных, превращение их в ресурс, выполнение сохранения и вставку его в локальный кеш.AngularJS array.push ng: repeat not update
create = (data, success, error) ->
throw new Error("Unable to create new user, no company id exists") unless $resource_companies.id()
# create the resource
new_model = new resource(data)
# manually add the company id into the payload (TODO: company id should be inferred from the URL)
new_model.company_id = $resource_companies.id()
# do the save and callbacks
new_model.$save(() ->
list.push(new_model)
success.call(@) if success?
, error)
Моя проблема в том, что ng: repeat, который следит за переменной списка, не обновляется. Насколько я могу судить, это не происходит за пределами AngularJS, поэтому он не требует $ scope. $ Apply(), чтобы поддерживать его в актуальном состоянии (действительно, если я попытаюсь вызвать дайджест, я получу дайджест, который уже выполняется ошибка)
Что вдвойне странно, есть ли у меня такой же шаблон, который использовался в других местах без проблем.
код, используемый мой контроллер для доступа к массиву списка является (это в службе)
# refreshes the users in the system
refresh = (cb) -> list = resource.query(() -> cb.call(@) if cb?)
В контроллере:
$scope.users = $resource_users.refresh()
Я добавил некоторые отладки вокруг этого. Я вижу, что дайджест вызывается после того, как возникает массив .push, но в $ scope.users, который должен указывать на ссылку массива, все равно сообщает о старых элементах в массиве. Это как-то ссылка на массив не передается правильно. – Samuel
$ scope.users указывает на ссылку в массиве? Как так? – Sharondio
$ scope.users указывает на переменную «список» в службе через функцию обновления. список включен в эту службу, так что могут быть доступны как методы обновления, так и методы создания. – Samuel