成功ajax请求后如何从Controller调用某些指令?
例如,如果我有功能:
function successAjax()
{
call directive
}
如果我有模板:
<directive></directive>
应该出现:
<p>success</p>
答案 0 :(得分:2)
您可以选择自己想要的方式。如果我是你,我会将将你的AJAX调用移动到你的指令中以完全回避这个问题(甚至更好:将AJAX调用移动到注入到其中的服务指令):
angular.module('app').directive('directive', [
'$http',
function($http) {
return {
link: link,
scope: {}
};
function link(scope, elem, attrs) {
scope.doAjax = doAjax;
function doAjax() {
$http.get('url').then(function() {
elem.append('<p>success</p>');
});
}
}
}
]);
如果您绝对 要在控制器中进行AJAX调用,则可以使用事件,但是您应该保留这些事件,因为它们会阻塞摘要循环:
// Controller
function doAjax() {
$http.get('url').then(function() {
$scope.$broadcast('some.event.descriptor');
});
}
// Directive
function link(scope, elem, attrs) {
scope.$on('some.event.descriptor', function() {
elem.append('<p>success</p>');
});
}
另一个选择是将控制器中的一些数据绑定到指令:
// Controller
$scope.someData = '';
$http.get('url').then(function() {
$scope.someData = 'success';
});
<!-- Controller Template -->
<directive data-something="someData"></directive>
// Directive
function() {
return {
scope: {
something: '='
}
};
}
<!-- Directive Template -->
<p>{{ something }}</p>
答案 1 :(得分:0)
您应该创建另一个服务,您将在其上设置一个值以通知请求已完成。然后在您的指令中,您将监视该服务中的变量,并在ng-if
答案 2 :(得分:-1)
首先,在使用指令调用ajax后,我觉得不需要显示成功消息。 Angularjs使用$ q服务来处理http调用并返回promise对象并在控制器中处理它,之后您可以将成功消息从控制器范围绑定到您的视图。
如果你想从控制器触发指令,你可以使用$ broadcast将事件发送到整个$ rootScope并在你的指令中处理它。
示例:
$rootScope.$broadcast('myFunction',{});
指令:
scope.$on('myFunction',function(event, data){
// Do what ever you want to do
});
这对您有所帮助。感谢。