2016-07-23 19 views
1

Ich habe eine Anwendung, wo auf der Homepage zeige ich alle Freunde (von einem Json mit GET) auf der Seite. Ich habe einen Button, um einen Freund auf der Startseite hinzuzufügen. Beim Klicken, es bringt mich zu einer anderen Ansicht mit Formularfeldern, um die Buddy-Details einzugeben. Nach dem Absenden der Details werde ich wieder auf die Homepage gebracht, die den neu hinzugefügten Kumpel mit anderen Buddies rendern soll.wechselnde Ansicht von Controller löst keine Ansicht aktualisieren

Alles funktioniert gut. Aber das einzige Problem besteht darin, nach der Übermittlung der Buddy-Details zur Startseite zurückzukehren. Die Seite spiegelt nicht den neu hinzugefügten Buddy in der Ansicht wider. Der Bereich wird jedoch aktualisiert.

Ich habe versucht mit $ scope. $ Apply() und $ scope. $ Digest() wie hier erwähnt angular.js: model update doesn't trigger view update aber es ist nicht meine Sicht aktualisieren. Außerdem verwende ich den gleichen Controller für meine Homepage und füge den Buddy hinzu, so dass mein Umfang gleich ist.

Kann mir jemand sagen, was ich hier falsch mache? Gibt es eine andere Möglichkeit, das gleiche zu implementieren?

Mein Code geht hier.

Home.html Ansicht

<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> 

hinzufügen Buddy Ansicht (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> 

Code Controller:

$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 
}; 

Mein app.js Routing enthält

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 Anmerkungen:

Nach mehr suchen, fand ich, dass die Ansicht zu ändern $ Standort verwendet, ist die Steuerung neu zu laden. Daher wird der Bereich aktualisiert und in den vorherigen Zustand zurückgesetzt. Gibt es eine Möglichkeit, das zu umgehen?

Antwort

0

Ist Ihre $scope.addThisBuddy Funktion in der BuddyController? Wenn Sie dann auf $scope verweisen, verweist es auf den Bereich der Ansicht "Buddy hinzufügen", nicht auf die Ansicht "Home".

+0

Ich verwende den gleichen Controller für beide Ansichten. Meine Funktion $ scope.addThisBuddy befindet sich im HomeController. Wenn ich console.log mache, kann ich die aktualisierte Buddyliste sehen, aber die Ansicht wird nicht aktualisiert. – Taani

+0

Ich denke, es ist der $ location.path; Es setzt alle Controller zurück. (http://stackoverflow.com/questions/14485117/angularjs-location-path-change-without-all-controllers-resetting) Können Sie versuchen, console.log _after_ dem $ location.path-Code auszuführen? –

+0

Ich habe die console.log nach $ location.path. Es aktualisiert den Umfang mit dem neuen Freund. Obwohl die Ansicht nicht aktualisiert wurde. – Taani

Verwandte Themen