2013-10-28 6 views
0

Вот очень простой пример того, что я пытаюсь сделатьПросмотр не обновляется после обновления области видимости

Athlete.save(athlete,function(result) 
{ 
     $scope.athlete = result.athlete; 
}); 

Вопрос заключается в том, что переменная $ scope.athlete не обновляется, на мой взгляд. Для того, чтобы получить его, чтобы обновить я должен сделать это

Athlete.save(athlete,function(result) 
{ 
     $scope.athlete.fname = result.athlete.fname; 
     $scope.athlete.lname= result.athlete.lname; 
     $scope.athlete.gender= result.athlete.gender; 
     .... 
}); 

Это надоедает очень быстро. С первым блоком кода он как бы угловатый не знает, что моя переменная $ scope.athlete обновлена. Эта функция запускается из ng-click, а не из некоторого jquery-запроса, я делаю это угловым способом, насколько мне известно.

здесь более простой случай я сделал: http://plnkr.co/edit/lMCPbzqDOoa5K4GXGhCp

+0

что вы показали, это хорошо ... создать простой демо в plunker или jsfiddle, что дублирует проблемы, попробуйте обертывание в '$ объеме. $ apply() '... будет вызывать erorrs, если дайджест уже в процессе, но стоит выстрел – charlietfl

+0

Я сделал более простой пример, который также имеет проблему http://plnkr.co/edit/lMCPbzqDOoa5K4GXGhCp – bsparacino

+0

OK ... второй случай работает, когда вы меняете индивидуальные свойства ... так что теперь проблема – charlietfl

ответ

1

athlete = { fname: 'new fname', lname: 'new lname' };, кажется, создает новую локальную переменную с именем athlete, вместо того, чтобы обновить один вы проходящее.

Лучший способ справиться с этим было бы передать $index от athlete к функции updateAthlete() и выполните следующие действия:

$scope.updateAthlete = function (index) { 
    $scope.athletes[index] = { 
     fname: 'new fname', 
     lname: 'new lname' 
    }; 
}; 

EDIT: см рабочий plunkr: http://plnkr.co/edit/KPu3CSvGIl8l581r9A5o?p=preview

0

Посмотреть этот ответ:

https://stackoverflow.com/a/13104500/151084

Примитивы передаются по значению, объекты передаются «копией ссылки ».

В частности, когда вы передаете объект (или массив) вы (невидимо) проходящую ссылку на этот объект, и можно изменить содержимого этого объекта, но если вы пытаетесь перезаписать ссылку это не повлияет на копию ссылки, удерживаемой вызывающим абонентом, то есть сама эта ссылка передается по значению.

Это объясняет, почему плункер не обновляется. Однако пример вашего встроенного кода (где вы используете $scope.athlete = result.athlete) кажется, что он должен работать. Можете ли вы создать образец, показывающий, что это не удается?

0

я получил помощь от здесь, чтобы решить эту проблему: https://groups.google.com/forum/#!msg/angular/Ih06VLDH_JU/EtHLrGeMgUEJ

Есть два способа, один уже упоминалось и что использовать индекс, чтобы обновить оригинальный способ.

Второй способ заключается в использовании angular.copy (источник, место назначения)

Смежные вопросы