AngularJS将服务数组变量绑定到控制器范围

 天智-孙会军 发布于 2023-02-06 09:57

我已经能够将来自服务的原始数据的对象正确地绑定到来自控制器的范围变量,但是我在使用来自服务的数组变量做同样的事情时遇到了麻烦.

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


我有一个登录函数,在成功传递userId时调用initMySets,我知道服务中的mySets变量正在角度副本上正确填充,但我没有在控制器中获得实际更新.

$ scope.user变量正在从UserService更新,但mySet ng-repeat不显示服务中的列表.

从http.get返回的数据是来自我的MVC Web API控制器的IEnumerable复杂对象集合.我不确定这是否有所作为.

1 个回答
  • 绑定不起作用,因为您的阵列(在您的控制器中)永远不会改变.

    调用initSets成功函数时,内部数组指向一个新数组,但您的范围变量仍指向空的初始数组.

    而不是创建一个新数组,清除您的初始数组并将新项目推送到初始数组:

    替换为:

    mySets = [];
    angular.copy(data, mySets);
    

    那个:

    mySets.length = 0; // Clear initial array
    mySets.push.apply(mySets, data); // Push data to initial array
    

    看到这个小提琴(我使用$ timeout模拟异步回调):http://jsfiddle.net/UJTPD

    2023-02-06 09:59 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有