2016-07-23 2 views
1

У меня есть приложение, где на главной странице я показываю всех приятелей (из json using GET) на странице. У меня есть кнопка, чтобы добавить собеседника на главную страницу. При щелчке, я перейду к другому виду с полями форм, чтобы ввести детали собеседника. После того, как я отправил подробности, я снова попал на главную страницу, которая должна отображать нового добавленного друга с другими друзьями.изменение вида с контроллера не запускает просмотр обновления

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

Я попытался использовать $ scope. $ Apply() и $ scope. $ Digest(), как упоминалось здесь angular.js: model update doesn't trigger view update, но это не обновление моего представления. Также я использую один и тот же контроллер для своей домашней страницы и добавляю приятеля, чтобы моя область была такой же.

Может ли кто-нибудь сказать мне, что я делаю неправильно здесь? Есть ли другой способ реализовать то же самое?

Мой код идет сюда.

home.html вид

<div class="jumbotron"> 
    <h1>Welcome to My Buddy List</h1> 
    <a class="btn btn-primary btn-lg" href="#/add_buddy">Add Buddy</a> 
</div> 
<h2>My Buddies</h2> 
<ul class="media-list"> 
    <li class="media col-md-6" ng-repeat="buddy in buddies|filter:search"> 
    <a class="pull-left thumbnail" href="#/buddy/{{buddy.id}}"> 
     <img class="media-object" width="100" ng-rc="img/{{buddy.image_name}}.jpg" alt="{{buddy.username}}"> 
    </a> 
    <div class="media-body"> 
     <h4 class="media-heading">{{buddy.username | uppercase}} 
      <span class="badge">{{buddy.status}}</span> 
     </h4> 
     <p> 
      <strong>First Name:</strong> {{buddy.first_name | capitalize}}<br/> 
      <strong>Last Name:</strong> {{buddy.last_name | capitalize}}<br/> 
      <strong>Status:</strong> {{buddy.status | capitalize}}<br/> 
      <strong>Type:</strong> {{buddy.type | capitalize}} Buddy 
      <a class="trashcan" data-ng-click="removeBuddy(buddy.id)" ><img class="trashcan" src="img/trashcan.png" alt="Delete"</a> 
     </p> 

    </div> 
</li> 

Добавить вид Бадди (add_buddy.html)

<div class="panel panel-default"> 
<div class="panel-heading"> 
    <small><a href="#">Go Back</a></small> 
    <h3>Add Buddy</h3> 
</div> 
<div class="panel-body">   
    <form name="buddyForm" class="app-form"> 
     <label>User name</label> : <input type="text" name="userName" ng-model="user.userName" required><br/> 
     <label>First name</label> : <input type="text" name="firstName" ng-model="user.firstName" required><br/> 
     <label>Last name</label> : <input type="text" name="lastName" ng-model="user.lastName" ><br/> 
     <label>Email</label> : <input type="email" name="email" ng-model="user.email" ><br/> 
     <!--label>Comments</label> : <textarea type="textarea" name="bio" ng-model="user.bio" ></textarea><br/--> 
     <button class="submitButton" data-ng-click="addThisBuddy(user)">Submit</button> 
    </form> 
</div> 
</div> 

контроллера код:

$scope.addThisBuddy = function() { 
    $scope.newBuddy = [{ 
     id: 100, 
     first_name: $scope.user.firstName, 
     last_name: "Anand", 
     birthday: "05/23/1998", 
     starred: "true", 
     username: $scope.user.userName, 
     image_name: "anand", 
     type: "Hometown", 
     bio: "Viswanathan Anand was born on 11 December.", 
     last_login: "05/23/2016", 
     email: "[email protected]" 
    }]; 

    $scope.buddies = $scope.buddies.concat($scope.newBuddy); 
    $location.path('home'); //skipping to view the newly added buddy on homepage 
    $scope.$apply(); //tried but not updating view 
    $scope.$digest(); //tried but not updating view 
}; 

Моего app.js содержащих маршрутизации

angular.module('myApp', ['ngRoute']) 
.config(function($routeProvider) { 
$routeProvider.when('/home', {templateUrl: 'partials/home.html', controller: 'HomeController'}); 
$routeProvider.when('/buddy/:id', {templateUrl: 'partials/buddy.html', controller: 'BuddyController'}); 
$routeProvider.when('/type/:type', {templateUrl: 'partials/buddy_type.html', controller: 'BuddyTypeController'}); 
$routeProvider.when('/starred', {templateUrl: 'partials/starred_buddy.html', controller: 'StarredController'}); 
$routeProvider.when('/add_buddy', {templateUrl: 'partials/add_buddy.html', controller: 'HomeController'}); 
$routeProvider.otherwise({redirectTo: '/home'}); 
}); 

EDIT Примечание:

После делать больше поиска, я обнаружил, что изменения вида с помощью $ расположения является перезагрузкой контроллера. Поэтому область обновления обновляется и возвращается в прежнее состояние. Есть ли способ обойти это?

ответ

0

Является ли ваш $scope.addThisBuddy функцией в BuddyController? Затем, когда вы ссылаетесь на $scope, он ссылается на область просмотра Add Buddy, а не на Home.

+0

Я использую тот же контроллер для обоих видов. Моя функция $ scope.addThisBuddy находится в HomeController. Если я делаю console.log, я могу просмотреть обновленного буддиста, но представление не обновляется. – Taani

+0

Я думаю, что это $ location.path; он сбрасывает все контроллеры. (http://stackoverflow.com/questions/14485117/angularjs-location-path-change-without-all-controllers-resetting) Можете ли вы попытаться выполнить console.log _after_ код $ location.path? –

+0

Я сделал console.log после $ location.path. Это обновление области с новым приятелем. Хотя представление не обновлено. – Taani

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