Javascript 角度';s的资源承诺在加载数据时不重新呈现
我是AngularJS的新手,在加载数据时很难得到resource重新渲染视图的承诺。这导致{{}被替换为空格(来自承诺),但视图仍然是这样 我已经看到了许多关于承诺问题的例子,这些问题是通过$apply、$digest、$watch等解决的,我愿意接受这些建议。我很想知道我的方法的根本问题。这是我的控制器代码Javascript 角度';s的资源承诺在加载数据时不重新呈现,javascript,binding,angularjs,promise,angularjs-scope,Javascript,Binding,Angularjs,Promise,Angularjs Scope,我是AngularJS的新手,在加载数据时很难得到resource重新渲染视图的承诺。这导致{{}被替换为空格(来自承诺),但视图仍然是这样 我已经看到了许多关于承诺问题的例子,这些问题是通过$apply、$digest、$watch等解决的,我愿意接受这些建议。我很想知道我的方法的根本问题。这是我的控制器代码 <div ng-controller='pook'> <p>There are {{posts.length}} posts</p> <div
<div ng-controller='pook'>
<p>There are {{posts.length}} posts</p>
<div ng-repeat='post in posts'>
<h3>{{post.title}}</h3>
<div>{{post.text}}</div>
<a href='/readPost/{{post.id}}'>More</a>
| -
<a href='/editPost/{{post.id}}'>Edit</a>
| -
<a href='/deletePost/{{post.id}}'>Delete</a>
</div>
</div>
<script type='text/javascript'>function pook($scope, $http, $route, $routeParams, $resource)
{
/*Approach #1 does work
$http.post('/').success(function(data, status, headers, config)
{
$scope.posts = data.posts;
});
*/
var User = $resource('/');
/*Approach #2 does work
User.save('', function(data)
{
$scope.posts = data.posts;
})
*/
//Approach #3 does NOT work -> renders blanks and never re-renders on loaded data
$scope.posts = User.save().posts
}
</script>
有{{posts.length}}个帖子
{{post.title}
{{post.text}
| -
| -
函数pook($scope、$http、$route、$routeParams、$resource)
{
/*方法1确实有效
$http.post('/').success(函数(数据、状态、标题、配置)
{
$scope.posts=data.posts;
});
*/
var User=$resource('/');
/*方法2确实有效
User.save(“”,函数(数据)
{
$scope.posts=data.posts;
})
*/
//方法#3不起作用->渲染空白,并且从不在加载的数据上重新渲染
$scope.posts=User.save().posts
}
我加载的脚本是
//ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js'
//ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular resource.min.js'
这里是我想要的承诺行为的描述
.$resource将获取更改为:
var User = $resource('/');
$scope.postsResponse = User.$save();
你必须:
<div ng-repeat='post in posts'>
<h3>{{postResponse.post.title}}</h3>
<div>{{postResponse.post.text}}</div>
</div>
{{postResponse.post.title}
{{postResponse.post.text}
由于angular是基于承诺的,因此可以将$http或$resource操作的响应直接绑定到HTML,当解析后,angular会更改属性
如果可能,从服务器响应中删除包装器({posts:[]}
到[]
)。如果这样做,则需要提示资源响应是一个数组。有关更多信息,请参阅
发生此错误的原因是,当您对资源调用方法时,它返回一个空对象,因此没有.posts
。但是如果您将它绑定到代码,angular将等待它到达那里
这是您在前端应该做的全部工作,您确定服务器满足预期要求吗您确定需要一篇文章来检索数据吗?看起来您需要多花一点时间来学习如何构造角度代码。还要注意,$resource“创建了一个资源对象,允许您与RESTful服务器端数据源进行交互”(来自angular文档)。从您的示例来看,它不像是在调用restful服务。如果您只想进行常规的ajax调用,那么使用低级的$http服务并将其包装到自定义服务中,以便在错误破坏应用程序之前捕获错误。看看这个和其他有用的例子。绝对精彩。工作起来很有魅力。我现在明白了:promise没有“posts”键,因此绑定没有生效。我需要将(整个)承诺绑定到html,然后在html中指定数据在承诺中的位置。或者,从服务器中删除post密钥并使用isArray:true也可以。最后说到您的观点和@supermasher关于代码质量的问题,很抱歉,这只是示例代码-我知道使用POST获取数据并不完全是restful的。@user1649082我认为您没有正确使用“承诺”一词。“承诺”不是你的榜样$资源仅在内部使用承诺来最终更新它返回给您的数组的内容。所有承诺都是一个具有
然后函数的对象,您可以将回调传递给该函数。或者,您可以使用Restangular库,并将其配置为考虑嵌套响应。