我的数据对象不会以html显示!
我正在使用parse.com,当我在console.log(结果)时,我可以向下钻取并在检查窗口中查看我的对象属性。
app.controller('membershipCtrl', ['$scope', function($scope) {
var membership = Parse.Object.extend("Membership");
var query = new Parse.Query(membership);
query.ascending("priceDate").greaterThan('priceDate', currentTime).limit(1);
query.first({
success: function(results) {
$scope = results;
console.log($scope);
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}]);
从检查窗口:
attributes: Object
price: 90
priceDate: Mon Feb 01 2016 11:17:00 GMT-0700 (MST)
priceDescription: "Thru Sept 2016"
我的HTML是:
<div ng-app="myApp" ng-controller="membershipCtrl">
{{price}}{{priceDescription}}
</div>
答案 0 :(得分:2)
您的成功功能是覆盖整个$scope
变量,而不是在其中放置值。您需要执行后者才能实际访问您的视图:
success: function(results) {
$scope.price = results.price;
$scope.priceDescription = results.priceDescription;
console.log($scope.price);
console.log($scope.priceDescription);
},
答案 1 :(得分:1)
更新:在此处查找小提琴的工作版本:https://jsfiddle.net/h4od21fs/1/
所以你在这里有很多问题:
正如其他人所说,Parse和angular在没有角度插件的情况下彼此不了解,所以在你的情况下你需要在获得数据后调用$scope.$apply()
你把把手插在一起有棱角并且布局完全混乱
你不能只使用解析返回的对象,它会返回活动记录,因此你需要调用方法从中获取实际数据,即:
vm.results.price = results.get(&#39;价格&#39;)
并且在你的小提琴中你不包括angular.js,但包括很多其他东西,比如bootstrap,handlebars和jquery。
也不要忘记在parse.com上更改密钥,这样就没有人会使用你的配额。
结果代码:
var app = angular.module('myApp',[]);
app.run(function() {
Parse.initialize("Clfupzjbt9iWIdezPCZuBJqajuxHJ8okP5nteViS", "sakt1qjwM4duTAo3ZCvWWBM32Tv3ZdL13PQ0Eea4");
});
var currentTime = new Date();
currentTime = new Date(currentTime.getTime() - 25200000);
app.controller('membershipCtrl', ['$scope', function($scope) {
var vm = this;
vm.results = null;
var membership = Parse.Object.extend("Membership");
var query = new Parse.Query(membership);
//query.ascending("priceDate").greaterThan('priceDate', currentTime).limit(1);
// i commented it out as it was not returning any data with those conditions
query.first({
success: function(results) {
vm.results = {
price : results.get('price'),
priceDescription: results.get('priceDescription')
};
$scope.$apply();
console.log(vm);
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}]);
当您在控制器内部执行$scope = smooth
时,您不会更改范围,而是更改分配给控制器功能的$scope
参数的变量。当它作为引用传递时,它不会影响传递给控制器的$scope
对象。
您应该在范围上添加属性,或者如果您使用ControllerAs
语法,则应添加到控制器本身,即$ scope:
$scope.results = results // inside your success callback
对于controllerAs
语法:
app.controller('membershipCtrl', ['$scope', function($scope) {
var vm = this;
var membership = Parse.Object.extend("Membership");
var query = new Parse.Query(membership);
query.ascending("priceDate").greaterThan('priceDate', currentTime).limit(1);
query.first({
success: function(results) {
vm.results = results;
console.log(vm);
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}]);
在html中:
<div ng-app="myApp" ng-controller="membershipCtrl as vm">
{{vm.results.price}}{{vm.results.priceDescription}}
</div>
答案 2 :(得分:0)
据我所知,您正在覆盖整个$scope
对象,该对象具有您需要维护的某些属性,以保持Angular应用程序正常运行并保持绑定完整。
您要做的是将返回的值存储为$scope
对象的属性。而不是$scope = results;
你应该做一些单独的声明:
$scope.price = results.price;
$scope.priceDescription = results.priceDescription;
...等等,您要在HTML模板中引用任何属性。
请记住,$scope
不仅仅是值的存储,而是一个在Angular框架的其余部分的上下文中可以很好地运行的对象。如果您希望在覆盖之前查看它的唯一属性console.log($scope)
(或者在将声明修改为上述模式之后)。
答案 3 :(得分:0)
有几个问题:
Parse不是角度核心的一部分,因此您需要告诉角度在更改范围时更新视图。
您应该将数据分配给范围属性,而不是覆盖范围对象。一个简单的方法是angular.extend()
,它将使用与$scope
对象相同的属性和值更新results
query.first({
success: function(results) {
angular.extend($scope,results);// merge results into scope
$scope.$digest();//notify angular to run digests
console.log($scope.priceDescription);// check one of the new properties added
}