AngularJS-Dienst Binden array-variable auf den controller-scope

War ich in der Lage, richtig zu binden ein Objekt primitiven Daten von einem Dienst zu einer scope-variable aus einem controller, aber ich habe Probleme, das gleiche zu tun, mit einer array-Variablen aus dem Dienst.

service.js

myServices.factory('MyService', ['$http', function($http) {
var mySets = [];

  return {
  initMySets: function(userId, success, error) {
    $http.get(apiUrl + "/controller/getmysets", {params:{id:userId}}).success(function (data) {
      mySets = [];
      angular.copy(data, mySets);
    }).error(error);
  },

  getMySets: mySets


}]);

controllers.js

myControllers.controller('MenuController', ['$scope', 'UserService', 'MyService',
  function ($scope, UserService, MyService) {

  $scope.user = UserService.user;
  $scope.mySets = MyService.getMySets;

  $scope.logout = function() {
    UserService.logout();
  }
}]);

index.html

<nav id="app-menu"  ng-controller="MenuController" ng-class="{hide:!global.showMenu,slide:global.showMenu}">
  <div id="menu-head">
    <h4>{{user.Email}}</h4>
  </div>
  <ul>
    <div ng-switch on="user.UserId != null">
      <li ng-switch-when="true"><a href="#/main" ng-click="toggleMenu();logout();">Logout</a></li>
      <li ng-switch-when="false"><a href="#/login" ng-click="toggleMenu()">Login</a></li>
      <li ng-switch-when="true" ng-repeat="mySet in mySets">
        <a href="#/mySet /{{mySet.MySetId}}" ng-click="toggleMenu()">{{mySet.Label}}</a>
      </li>
    </div>
  </ul>
</nav>

Habe ich eine login-Funktion, die Anrufe initMySets auf Erfolg vorbei in die userId und ich weiß, dass die mySets variable in der service immer ordnungsgemäß ausgefüllt an den eckigen kopieren, aber ich bin nicht immer das aktuelle update in den controller.

Den $scope.user-variable aktualisiert wird von den UserService, aber die mySet ng-repeat ist nicht die Anzeige der Liste aus dem Dienst.

Die Daten, die zurückgegeben werden aus der http.zu bekommen ist die eine IEnumerable-Auflistung von komplexen Objekten von meinem MVC-Web-API-controller. Ich bin mir nicht sicher, ob das einen Unterschied macht.

  • Werfen Sie einen Blick auf $apply() Methode: docs.angularjs.org/api/ng.$rootScope.Umfang
  • während $apply erzwingt ein update und kann hilfreich sein, für einige Dienstleistungen, die sich nicht über Bereiche und ruft diese Methode auf die $rootScope teuer werden kann.
Schreibe einen Kommentar