2016-01-26 5 views
0

Я пытаюсь создать пользовательские переключатели, и я обнаружил, что мои контроллеры выполняются дважды для каждого экземпляра. Я не указывал контроллер просмотра дважды. Это, кажется, общая проблема. Я использую угловую-маршрутизацию, и соответствующий фрагмент кода для этого заключается в следующем:AngularJS: Маршрутизация запускает контроллер дважды

$routeProvider.when('/:action', { 
    templateUrl: function (params) { 
     if (!params.action) params.action = 'Index'; 
     return '_' + params['action']; 
    } 
}); 

Я использую ng-controller в шаблоне. Событие routeChangeSuccessful (или то, что он называется) срабатывает, и он компилирует все нормально, но, похоже, отслеживает некоторую функцию пост-ссылки, которая также компилирует все; таким образом, двойные экземпляры.

Что я делаю неправильно? Как я могу избежать дублирования вызовов?


Update

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

Почему ngRoute перекомпилирует начальное представление каждый раз? Есть ли элегантный обход?

+0

По какой-либо причине вы не используете параметр контроллера в инструкции «когда»? обычно вы не используете инструкцию ng-controller в шаблоне с маршрутизацией. –

+0

Шаблоны динамически выбираются, и я не хочу, чтобы один контроллер с конкретными потребностями каждого шаблона. – ricksmt

ответ

0

Последнее, что я проверил, ngView не мешает компиляции шаблона, который изначально извлекается, и на самом деле он перекомпилирует его, когда представление изменится, прежде чем заменять его и скомпилировать шаблон, полученный ngRoute.

Чтобы устранить эту проблему, у вас есть только запросы на AngularJS, возвращающие шаблоны. В противном случае верните пустой шаблон. Я справляюсь с этим, если запросы AngularJS содержат префикс подчеркивания. В маршрутизации MVC, если подчеркивание есть, верните запрошенное частичное; в противном случае верните макет с пустым телом.

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