2016-06-16 3 views
0

Моего UI маршрута имеет состояние, как:углового контроллера перезагружается при использовании директивы

 .state('projects', { 
      abstract: true, 
      url: "/?username&token", 
      templateUrl: "projects/views/Projects.html", 
      controller: 'ProjectController' 
     }) 
     .state('projects.mine', { 
      url: "mine", 
      templateUrl: 'projects/views/ProjectsMine.html' 
     }) 
     .state('projects.all', { 
      url: "all", 
      templateUrl: 'projects/views/ProjectsAll.html' 
     }) 

Я сделал директиву:

app.directive('description', function(){ 
     return{ 
      restrict: 'E', 
      templateUrl : 'projects/views/directives/ProjectDescription.html', 
      controller:ProjectController 
     } 
    }); 

Я сделал два файл точно таким же для государственных templateUrls, где только разница в том, что шаблон всех использует директиву описания, например:

<description></description> 

и другие один использует содержимое templateUrl для директивы описания (скопировано 1on1), когда не используется директива, но содержимое файла templateUrl перезагружает dosnt.

Все работает нормально, но когда я иду на «все» маршрут, ProjectController перезагружается. Директива выглядит следующим образом:»

<table> 
    <tr > 
     <td><b>name</b> </td> 
     <td>{{project.name}}</td> 
    </tr> 
    <tr > 
     <td><b>owner</b> </td> 
     <td>{{project.owner}}</td> 
    </tr> 
<table> 

директива добавляется в нг-повтора (в 'всех' состоянии):

<div ng-repeat="project in project|filter:searchText"> 
    <description></description> 
</div> 

Ссылки состояний в моем HTML:

<a ui-sref=".mine()"><button>my projects</button></a> 
    <a ui-sref=".all()"><button>all projects</button></a> 

    <div ui-view></div> 

другой «мой» использует содержимое директивы и dosnt перезагружает контроллер. Когда вы идете на «все» из «моих», перезагрузка происходит, когда я перехожу от «моего» к «все», r не перезагружается

Как я могу хранить все, как есть, но избегать перезагрузки контроллера?

+0

Контроллеры и директивы не являются постоянными. Если вам нужны постоянные данные, используйте услугу – lightswitch05

+0

@ lightswitch05 Я использую службу для получения данных. в контроллере, поэтому я использую вложенные состояния проекта для переключения между таблицами. https://angular-ui.github.io/ui-router/#nested-states--views –

+0

Вижу, я неправильно понял вашу цель. Вы хотите, чтобы 'projects.mine' наследовал от' projects.all' и применял дополнительный фильтр к списку. Не знаете, как это сделать с помощью UI-Router. Но это определенно вопрос UI-Router. Возможно, вы захотите изменить заголовок и вопрос, чтобы уточнить, что это не простой вопрос с контроллером и директивой. – lightswitch05

ответ

0

Удаление

controller:ProjectController 

установил его, используя контроллер: «controllerName» заставляет контроллер должен быть создан для каждого директива создана.

0

Вы должны связать на маршрут, как вызов функции:

<a ui-sref=".list()" class="btn btn-primary">List</a> <a ui-sref=".paragraph()" class="btn btn-danger">Paragraph</a>

+0

Я добавил свои ссылки, он по-прежнему перезаряжается. –

+0

Контроллеры активны только тогда, когда их маршруты активны. Когда вы переходите от директивы и маршрута, его контроллер удаляется из области действия и собирается мусор. Если вы не хотите, чтобы контроллер «перезагружался», вы не можете позволить ему покинуть область действия.Вы можете «скрыть» директиву, чтобы сохранить ее в объеме и не покидать ее маршрут. В противном случае контроллер должен будет перезагрузить. – lightswitch05

+1

@ lightswitch05 Вы могли бы предоставить ссылку на это? Я получил его работу, удалив синтаксис контроллера из директивы. вся точка вложенных состояний ui-router заключается в том, что вам не нужно создавать новый контроллер и вы можете переключать части вашего текущего вида. –

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