AngularJS service Bind variable de tableau contrôleur de portée

J'ai été en mesure de lier un objet primitif de données à partir d'un service à une étendue variable à partir d'un contrôleur, mais je vais avoir du mal à faire la même chose avec une variable de tableau de service.

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>

J'ai une connexion de fonction qui s'appelle initMySets sur la réussite de passage dans le userId et je sais que le mySets variable dans le service se remplis correctement sur l'angle de copie, mais je ne suis pas la mise à jour réelle dans le contrôleur.

Le $scope.la variable est mise à jour à partir de la UserService, mais le mySet ng-repeat n'est pas l'affichage de la liste de service.

Les données retournées à partir de l'adresse http.obtenez est un IEnumerable collection d'objets complexes à partir de mon MVC, Web API contrôleur. Je ne sais pas si cela fait une différence.

Jetez un oeil à $apply() méthode: docs.angularjs.org/api/ng.$rootScope.Portée
alors que $apply ne forcez la mise à jour et peut être utile à certains, les services eux-mêmes n'ont pas étendues et l'appel de cette méthode sur le $rootScope peut être coûteux.

OriginalL'auteur joshua.johnson.814 | 2014-01-07