gpt4 book ai didi

javascript - AngularJS 从指令设置函数的同步调用

转载 作者:行者123 更新时间:2023-11-29 18:21:41 25 4
gpt4 key购买 nike

我有这个指令:

app.directive('changemonth', function($animator) {
return {
link : function($scope, element, attrs) {
element.bind("click", function() {

if(element.attr('class').search('disabled') == -1) {

// récupération du calendrier :
if(element.attr('class').search('day') != -1)
var calendar = angular.element(element.parent().parent());
else
var calendar = angular.element(element.parent().parent().next().children()[1]);
var animator = $animator($scope, attrs);

animator.hide(calendar);
setTimeout(function() {
$scope.$apply(attrs.changemonth);
animator.show(calendar);
}, 500);
}
});
}
};
});

使用 attrs.changemonth,我调用一个函数(可以更改),例如这个:

$scope.next = function() {
var tmpMonth = $scope.monthsLabels.indexOf($scope.monthDisplayed) + 1;
var tmpYear = $scope.yearDisplayed;
if(tmpMonth==12) {
tmpMonth = 0;
tmpYear = parseInt($scope.yearDisplayed) + 1;
}
getCalendar(tmpMonth, tmpYear);
$scope.monthDisplayed = $scope.monthsLabels[tmpMonth];
$scope.yearDisplayed = tmpYear.toString();
};

所以这个函数调用另一个 getCalendar() 你可以在这里看到:

function getCalendar(month, year) {
$http({
method : "GET",
url : 'http://my_url/getCalendar',
params : {
group_id : $scope.group_id,
month : month,
year : year
}
})
.success(function(data) {
$scope.calendar = data;
});
}

getCalendar() 使用 $http 从数据库中获取日历。

我的问题是我想在指令中使用动画器之前等待 $http 的响应,像这样,我的日历只会在内容加载时显示。

我听说过 $q 和 promises。但我不知道如何在这个非常特殊的上下文中使用它。

如果这里有人有想法,那就太棒了。

最佳答案

尝试像这样从您的成功回调中进行广播。

.success(function(data) {
$scope.calendar = data;
$rootScope.$broadcast('event:calendar-received');
});

然后在你的指令中你可以等待接收这样的信号。

$scope.$on('event:calendar-received', function() {
... do your stuff with animator...
});

关于javascript - AngularJS 从指令设置函数的同步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18018149/

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