2013-06-12 3 views
3

У меня есть функция 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() 
+0

Я добавил некоторые отладки вокруг этого. Я вижу, что дайджест вызывается после того, как возникает массив .push, но в $ scope.users, который должен указывать на ссылку массива, все равно сообщает о старых элементах в массиве. Это как-то ссылка на массив не передается правильно. – Samuel

+0

$ scope.users указывает на ссылку в массиве? Как так? – Sharondio

+0

$ scope.users указывает на переменную «список» в службе через функцию обновления. список включен в эту службу, так что могут быть доступны как методы обновления, так и методы создания. – Samuel

ответ

0

Это может быть потому, что вы назначаете новый Справка. Угловая смотрит старую ссылку, и она никогда не меняется. Вот это где ссылка заменяется:

list = resource.query(/* ... */) 

Если, вместо этого, вы сделаете список является свойством объекта, нг-повторить часы Угловая должны иметь возможность наблюдать за изменением в list свойстве data объекта :

data.list = resource.query(/* ... */)