2015-12-01 2 views
1

Недавно я начал использовать Angular and Ionic, и мне кажется, что я пропускаю что-то основное в области видимости, которое должно быть очевидно, но не понимает, что это такое.Угловая область путаницы в шаблонах

У меня есть два ионных шаблона/страницы. Соответствующие состояния принадлежат одному контроллеру, и оба отображают список. Состояния определяются как ниже

 .state('app.group', { 
       url: '/group', 
       views: { 
       'menuContent':{ 
        templateUrl: 'templates/group.html', 
        controller: 'GroupController',      
       } 
       }, 
       onEnter: function($){ 
        console.log("Entered Group State"); 
       } 
     })    
     .state('app.search', { 
       url: '/pickGroup', 
       views: { 
       'menuContent':{ 
        templateUrl: 'templates/groups/pickGroup.html', 
        controller: 'GroupController'     } 
       }, 
       onEnter: function(){ 
        console.log("Entered Pick Group State"); 
       } 
     }) 

Первый шаблон

<ion-view title="My Groups"> 
    <ion-nav-buttons side="left"> 
     <button menu-toggle="left" class="button button-icon icon ion-navicon"></button> 
    </ion-nav-buttons> 
    <ion-nav-buttons side="right"> 
     <button class="right button button-icon icon ion-plus" ng-click="pickGroup()"></button> 
    </ion-nav-buttons> 
    <ion-content> 
     <div class="list card"> 
      <span>My Group Names</span> 
      <div ng-repeat="item in list" class="item"> 
       {{item.name}} 
      </div> 
     </div> 
    </ion-content> 
</ion-view> 

И второй шаблон

<ion-view title="Pick Groups"> 
    <ion-nav-buttons side="secondary"> 
     <button class="right button button-positive" ng-click="gotoCreateGroup()">Create Group</button> 
    </ion-nav-buttons> 
    <ion-content has-header="true"> 
     <span>In Pick Group</span> 
     <div class="list card"> 
      <span>Groups In My Viscinity </span> 
      <input type="text" ng-model="searchTxt.name" placeholder="Enter Group Name to Search"> 
      <div ng-repeat="item in list | filter:searchTxt" class="item"> 
       {{item.name}} 
      </div> 
     </div> 
    </ion-content> 
</ion-view> 

Контроллер имеет следующий код

$scope.list = [ 
    {name:"G1-1"}, 
    {name:"G1-2"}, 
    {name:"G1-3"} 
    ]; 
$scope.pickGroup = function(){ 
    $scope.list = [ {name:"G2-1"}, 
    {name:"G2-2"}, 
    {name:"G2-3"} 
    ]; 
    $location.path("/app/pickGroup"); 
    console.log('PickGroup called'); 
} 

При первая templa te загружает группы G1, как и ожидалось. Когда я нажимаю кнопку в первом шаблоне, который вызывает pickGroup для перехода ко второму шаблону с обновленными группами, группы G2 заменяют группы G1 в шаблоне один перед переходом, а второй отображается, но с группами G1. Когда я вернусь к первому шаблону через кнопку «Назад», появятся группы G2.

Я ожидал, что группы G2 появятся во втором шаблоне, так как я обновляю $ scope.list в функции pickgroup, но по какой-то причине они этого не делают. Похоже, я не совсем понимаю эту область.

Цените свою помощь, чтобы я понял это лучше.

Thanks, Sanjay.

+0

Я по-прежнему новичок в угловой, но думаю, вам нужно сделать $ scope. $ Apply (function() {[, .. что вы хотите делать ...]}), чтобы вызвать обновление до связывание. – Clay

+0

На самом деле неправильно читайте намерение вашего кода @ssskip правильно. – Clay

ответ

1

Когда u переключится в состояние «app.search», угловая заново создаст экземпляр контроллера, область, которую вы определили, является новой, поэтому вы не можете получить данные списка, которые инициализируются в состоянии «app.group» ».

Если вы хотите поделиться данными, вы можете использовать «Сервис».

+0

Спасибо @ssskip. Вызывает два вопроса. (1) Если это новый экземпляр контроллера, то почему изменения, сделанные в вызове функции pickGroup, отражаются в первом шаблоне и (2), поскольку переменная $ scope.list изменяется внутри функции pickGroup, не должны появляться изменения на втором шаблоне. Очевидно, что я что-то упустил - оцените любую ясность, которую вы можете предоставить. Благодарю. –

+0

@ user1227141 Потому что, когда функция u вызывает функцию pickGroup, на самом деле u находится внутри первой области шаблона, но изменения происходят только в текущей переменной области видимости, а не во второй, после того, как u переключится на второй шаблон, все вещи все новые, create, scope новый тоже. – ssskip

+0

Думаю, я понял. Когда pickGroup называется $ scope.list, изменяется в контексте первого шаблона, поэтому изменения отражаются там. Когда новый шаблон загружается и создается новый экземпляр контроллера, функция pickGroup не вызывается, и отображаются значения по умолчанию (G1) групп. Пожалуйста, поправьте меня, если это не так. Благодарю. –

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