gpt4 book ai didi

angularjs - 什么时候 $scope.$apply 需要用 Angular 处理对象/数组?

转载 作者:行者123 更新时间:2023-12-01 14:37:28 24 4
gpt4 key购买 nike

我正在使用 Soundcloud JS SDK 将我最喜欢的 Soundcloud 集成到一个简单的 Angular 应用中。

在使用 $scope.$apply 之前,我无法让用户收藏夹正确导入。

function TopListCtrl($scope, $http, $modal) {
$scope.getData = function(sc_user) {
SC.get('/users/'+ sc_user +'/favorites', {limit: 200}, function(tracks){
$scope.$apply(function() {
if (Object.getOwnPropertyNames(tracks).length > 1) {
$scope.likes = tracks;
$scope.sortField = 'like.favoritings_count';
$scope.reverse = true;
$scope.sc_user = sc_user;
}
else {
alert("That user has 0 Soundcloud likes. So sad...")
}
}).error(function (data, status, headers, config) {
alert("Something went awry with that request. Double check that's a real Soundcloud username");

})
});
}

如果你不使用 $scope.apply,它就不起作用(并且说 SC.get not defined)。

我想更好地理解为什么 $scope.$apply 是必要的。我问这个是因为当我刚刚使用 http api 时,我不需要它。

function TopListCtrl($scope, $http, $modal) {
$scope.getData = function(sc_user) {
var url = 'http://api.soundcloud.com/users/'+ sc_user +'/favorites.json?client_id=0553ef1b721e4783feda4f4fe6611d04&limit=200&linked_partitioning=1&callback=JSON_CALLBACK';
$http.jsonp(url).success(function(data) {
if (Object.keys(data.collection).length > 0) {
$scope.likes = data;
$scope.sortField = 'like.favoritings_count';
$scope.reverse = true;
$scope.sc_user = sc_user;
}
else {
alert("That user has 0 Soundcloud likes. So sad...")
}
}).error(function (data, status, headers, config) {
alert("Something went awry with that request. Double check that's a real Soundcloud username");
});
}

最佳答案

通常 angular 知道正在执行的代码,因为你是提供函数回调的人,但实际上调用它们的是 angular。在 Angular 调用一个函数之后,它会稍后调用 $apply 来触发一个 $digest 循环。

如果您不知道 $digest 循环是什么,这个概念很简单。在 $digest 阶段,angular 将对每个使用 $watch 处理程序设置的范围变量进行脏检查,并检查它是否已更改;如果它有 Angular 将调用其相应的 $watch 处理程序来更新 View 。

回到最初的问题——当 angular 知道你的代码时,它会为你触发一个 $digest 循环——所以不需要显式地调用 $apply。如果您处理 jquery 事件,那就另当别论了。 Angular 不知道可能需要 $digest - 怎么可能呢?所以需要 $apply 来手动触发 $digest。

关于angularjs - 什么时候 $scope.$apply 需要用 Angular 处理对象/数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24295145/

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