Angularjs在控制器之间传递数组

时间:2014-10-08 05:13:34

标签: angularjs angularjs-service

我已经阅读了有关此主题的几个教程和帖子,但似乎无法弄清楚我的代码有什么问题。对我来说,我的服务中的数据似乎存在范围问题。我的代码被拆分为单独的文件。这是我的代码: github链接:https://github.com/StudentJoeyJMStudios/PetPinterest.git

 //in dataService.js
 var app = angular.module('se165PetPinterestWebApp');

 app.service('SharedData', function ()
 {
    var categoryOfSelectedAnimals = [];

    this.setCatOfSelAnimals = function(pulledCategoriesFromParse)
    {

        categoryOfSelectedAnimals = pulledCategoriesFromParse;
        console.log('after assignment in set::' + categoryOfSelectedAnimals);
    };
    this.getCatOfSelAnimals = function()
    {
        console.log('in get::::' + categoryOfSelectedAnimals);

        return categoryOfSelectedAnimals;
    };
 });

在我的第一个控制器中设置signup.js中的数据

app.controller('SignupCtrl',['$scope', 'SharedData', function ($scope, SharedData)
{  
     var Categories = Parse.Object.extend('Categories');
  var query = new Parse.Query(Categories);

  query.find({
      success: function(results)
      {

          $scope.availableCategoriesOfAnimals = results;

          SharedData.setCatOfSelAnimals(results);


      },
      error: function(error)
      {
          alert('Error: ' + error.code + ' ' + error.message);
      }
  });
  };
}]);

然后在我的另一个控制器中尝试从我的服务中的数组中获取数据:

var app = angular.module('se165PetPinterestWebApp');
app.controller('CatSelCtrl', function ($scope, SharedData)
{
      $scope.availableCategoriesOfAnimals = SharedData.getCatOfSelAnimals();
});

当我从SharedData.getCatOfSelAnimals打印内容时,我每次都得到0。请帮忙。非常感谢你提前。

编辑:在使用字符串后,我发现set函数中的更改字符串未保存到服务中,当我在服务中调用get函数时,字符串不会从set方法更改。请帮助,提前谢谢。

编辑:所以当我使用window.location.href =' ../ views / categorySelection.html&#39 ;;导航到新页面时在我的signup.js中,它重新加载我的dataService.js,它将我的变量重新设置为空。有没有人对如何解决这个问题有任何想法?

2 个答案:

答案 0 :(得分:2)

<强> 修改

首先:你丢失数据的原因

您需要正确设置路由。现在您不是在更改视图,而是使用window.location.href加载新的引导程序文件(dashboard.html),即保存在内存中的所有内容都将丢失。所以你已经做得很好,但是当你改变到dashboard.html时,Parse的所有数据都会丢失。

您可以通过配置路由并使用$location.url()更改URL来解决此问题。在这里阅读更多关于angular.route的信息:https://docs.angularjs.org/api/ngRoute/service/ $ route

角度方式

在查看您的代码并运行您的应用后,我认为我们需要退后一步。 Angular很难习惯,但是有很多很好的教程。我想你可能想读一些它们,以便更好地掌握它的工作原理以及如何设置和构建你的应用程序。

从这里开始:http://www.airpair.com/angularjs

样板

使用Parse为Angular应用找到此样板文件。它可能是你可以使用的东西。 https://github.com/brandid/parse-angular-demo


<强> 原始

或者更快的方法来清空$ scope.availableCategoriesOfAnimals然后在不破坏引用的情况下合并新数据:

$scope.availableCategoriesOfAnimals.length = 0;
Array.prototype.push.apply($scope.availableCategoriesOfAnimals, pulledCategoriesFromParse);

答案 1 :(得分:0)

你是breaking the reference。这是一个JavaScript问题,对于这个问题不是一个有角度的问题;)

在你的设定功能中试试这个:

 categoryOfSelectedAnimals.length=0;
 pulledCategoriesFromParse.forEach(function (e) {categoryOfSelectedAnimals.push(e)});

而不是重新分配

编辑:angular extend适用于对象,而不是数组,所以用一点JS替换它。