2015-05-24 3 views
0

Я пытаюсь выяснить, что происходит в конфигурации ui-view. Поскольку большинство ответов, которые я вижу по этому сообщению, это то, что контроллер определен в маршрутизаторе и html.В случае использования ui-view, контроллер угловых вызовов несколько раз

Пожалуйста, посмотрите на этот пример, он вызывает контроллер 11 раз! (Нажмите о и проверьте таблицу: есть 11 строк с «приветом»)

http://plnkr.co/edit/YOshrVFmtUHFEvhdWH6S?p=preview

routerApp.controller('scotchController', function($scope) { 

    $scope.message = 'test'; 

    $scope.hi = function() { 
    $scope.scotches.push({name: 'hi', price: 10}) 
    }; 

Ваших идей, как исправить и сделать только один вызов к контроллеру приветствуется!

+0

Моя ставка заключается в том, что вы вызываете функцию «hi()» в шаблоне таблицы. Я думаю, что когда вы вызываете функцию «hi()», это вызывает повторную визуализацию шаблона таблицы. Когда шаблон повторно отображает, он снова вызывает «hi()», и это вызывает другой цикл повторной визуализации. Вы должны посмотреть на ошибки консоли, вы входите в бесконечный цикл. – Kosta

+0

Справедливо, но почему в этом случае происходит повторное рендеринг? Это означает, что невозможно вызвать функции внутри шаблонов, а также фильтры, из-за чего исходная проблема началась с фильтра, и я начал упрощать свой код, и один из способов, которым я нашел, как избежать этой проблемы - переместить фильтр из html в контроллер. –

+0

Я не уверен, что фильтрация должна вызвать тот же эффект, если вы предоставите Plunker с вашей первоначальной проблемой, причина может быть иной. – Kosta

ответ

1

Ваш фильтр является виновником. Пока он возвращает объект с одинаковыми значениями, он возвращает другой объект на каждую итерацию, что означает, что модель изменена. Если вы посмотрите на консоль, вы увидите, что Angular в конечном итоге сдастся и у вас есть infinite digest.

Обычно я использую фильтры только для отображения. IMO такого рода преобразование данных принадлежит вашему контроллеру. Если это необходимо для совместного использования несколькими контроллерами, переместите код на завод или службу, и ваши контроллеры могут это использовать.

+0

Спасибо Энди, я видел ошибку в консоли, я просто не понял почему такое угловое поведение. В этом случае функциональность фильтра внутри ui-view довольно ограничена –

+0

Если ваш фильтр возвращает * тот же самый точный * объект, а не объект, который только что выглядел так же, ошибки должны исчезнуть. Я просто не думаю, что фильтр является правильным выбором. –

+0

Я имел в виду, что до вашего первого объяснения это было не совсем ясно. Спасибо за ответ! –

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