gpt4 book ai didi

javascript - 异步调用 firebase 后,Angular 应用程序未更新(脏检查)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:45:49 27 4
gpt4 key购买 nike

我正在为我的博客使用单页 Angular 应用程序。在加载时, Controller 为所有博客文章调用我的 firebase,并将它们推送到 $scope.posts 数组中。 HTML 使用 ng-repeat 来显示每篇博文的片段。但是,除非用户激活页面上的任何其他随机功能以强制执行摘要循环,否则根本不会出现任何片段。如何在没有用户交互的情况下进行脏检查或强制执行摘要循环?

angular.module('evancodes.main', [])
.controller('MainController', function(Main, $http, $scope) {
$scope.posts = [];
$scope.getAllPosts = function() {
var ref = new Firebase("https://MYFIREBASENAME.firebaseio.com/");
ref.on("value", function(snapshot) {
var posts = snapshot.val();
for (var post in posts) {
$scope.posts.push(posts[post]);
}
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}
$scope.getAllPosts();
})

HTML:

<div class="snippets col-md-9 col-md-offset-1" ng-repeat="post in posts | limitTo: 5">
<a href="#/posts/{{post.url}}">
<div class="snippetTitle">
{{post.title}}
</div>
<div class="snippetBody" ng-bind-html="post.content | limitTo: 650"></div>
</a>
</div>

最佳答案

您需要手动触发摘要,因为在触发回调时您已经超出了 Angular 的范围。有几种不同的策略。使用$apply()是一个:

        ref.on("value", function(snapshot) {
var posts = snapshot.val();
for (var post in posts) {
$scope.posts.push(posts[post]);
}
$scope.$apply(); // RUN DIGEST HERE
}, function (errorObject) {

值得一提的是,如果您使用 AngularFire,它会为您处理好。 https://www.firebase.com/docs/web/libraries/angular/index.html

关于javascript - 异步调用 firebase 后,Angular 应用程序未更新(脏检查),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710799/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com