我已经阅读了有关此主题的几个教程和帖子,但似乎无法弄清楚我的代码有什么问题。对我来说,我的服务中的数据似乎存在范围问题。我的代码被拆分为单独的文件。这是我的代码: 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,它将我的变量重新设置为空。有没有人对如何解决这个问题有任何想法?
答案 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替换它。