2015-06-22 2 views
1

У меня есть два экрана в моем проекте, MemberList.HTML и EditMember.html. MemberList.HTML отображает всех участников с ссылкой «Редактировать» для каждого участника. Когда я нажимаю на ссылку Изменить, она вызывает функцию нг-клик = "EditMember (член)" и код для EditMember (член) является

$scope.EditMember = function (member) { 
    var getData1 = angularService.GetMember(member.ID); 
    getData1.then(function (mem) { 
     $scope.Member = mem.data; 
     alert($scope.Member.FirstName); 
     $location.path('/members/editmember'); 
    }, function (error) 
     { 
      alert('Error in getting Member record'); 
     } 
    ); 
}; 

код EditMember.Html

<div> 
    <div class="bottom-margin"> 
     <div class="left-label">ID</div> 
     <div><input type="text" name="txtID" id="txtID" ng-model="Member.ID"/></div> 
    </div> 
    <div class="bottom-margin"> 
     <div class="left-label">First Name</div> 
     <div><input type="text" name="txtFirstName" ng-model="Member.FirstName"/></div> 
    </div> 
</div>   
<div> 
    <div class="bottom-margin"> 
     <div class="left-label"><input type="button" name="btnCancel" value="Cancel" /></div> 
     <div><input type="button" name="btnSave" value="Save" /></div> 
    </div> 
</div> 

Маршрут конфигурация

$routeProvider.when('/members/editmember', 
     { 
      templateUrl: '/Template/EditMember.html', 
      controller: 'myCntrl' 
     }); 

Теперь проблема заключается в боевой готовности он показывает мне имя, но оно не отображает никаких данных в EditMember.Html.

Все в одном угловом КОНТРОЛЛЕРА, здесь не используется другой контроллер.

Как передать $ scope с данными элемента в EditMember.Html? Что я делаю не так?

+0

использовать другой контроллер вызова службы там при инициализации контроллера – PavanAsTechie

+0

Я думаю, когда вы вызываете '$ location.path()', ваш контроллер перезагружается. Попробуйте добавить 'reloadOnSearch: false' в вашу конфигурацию маршрута. Но, по моему мнению, нет смысла менять путь местоположения, если вы работаете на одном контроллере. – akn

ответ

4

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

Лично я бы передал ссылку в URL-адресе члену, который вы хотите изменить, например. /members/edit/1234 и загружать эти данные при загрузке контроллера или во время маршрутизации с использованием $routerProvider resolve.

Лично я хотел бы также рассмотреть возможность использования другого контроллера для редактирования и просмотра, а также перемещения любых общих функций в службы - просто чтобы сохранить целостность.

0

@glennanthonyb, я сделал что-то вроде этого .... Я использую тот же контроллер здесь.

В пути, я добавил

$routeProvider.when('/members/editmember/:ID', 
     { 
      templateUrl: '/Template/EditMember.html', 
      controller: 'myCntrl' 
     }); 

и в контроллере я добавил параметр $ routeParams

if ($routeParams.ID != null) { 
     GetMember(); 
    } 
    function GetMember() { 
     var getData = angularService.GetMember($routeParams.ID); 
     getData.then(function (mem) { 
      $scope.Member = mem.data; 
     }, function (error) { 
      alert('Error in getting records'); 
     }); 
    } 

В MemberList.Html вместо вызова функции, я использую HREF

<a href="/members/editmember/{{member.ID}}">Edit</a> 

Я не уверен, что это правильный способ сделать это или нет, но он работает.

+0

Да, что-то вроде этого хорошо. Перед загрузкой данных может возникнуть мерцание усов, но вы, возможно, уже обработали это в шаблоне, используя 'ng-if' или' ng-show'. Стоит взглянуть на решение $ routeProvider как средство для получения данных до загрузки вида, но использование этого метода зависит от конкретного варианта использования. – glennanthonyb

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