我在jQuery函数中调用AngularJS函数,但执行不是顺序的。当我执行此页面时,jQuery警报首先显示而不是AngularJS警报。如何确认AngualarJS功能已执行?在执行AngularJS函数之后,它应该在jQuery上执行下一行。
Javascript功能: -
(function( $ ){
$.fn.multipleInput = function() {
return this.each(function() {
angular.element('#theController').scope.getFullName($input.val());
alert("AFTER ANGULAR JS");
}
});
AngularJS功能: -
var bipin=angular.module("ui.bootstrap.demo",['ui.bootstrap']);
bipin.controller('theController',['$scope','$q','$http','$window', function($scope,$q,$http,$window){
$scope.selected = '';
$scope.email = '';
$scope.fullName = '';
$scope.getFullName= function(item) {
alert();
return $http.get('https://myservice/v1/query/'+$label)
.then(function(response){
return response.data.items.map(function(item){
alert("INSDE ANGULAR JS");
$scope.fullName=item.fullName;
return item.fullName;
});
});
};
答案 0 :(得分:2)
Scope是jQuery插件,所以你需要调用它:
angular.element('#theController').scope().getFullName($input.val());
而不是angular.element,你可以调用$。
$('#theController').scope().getFullName($input.val());
答案 1 :(得分:1)
多数民众赞成因为$http.get
是异步的。当你调用它时,它返回一个promise并继续执行jquery函数。当http调用从服务器.then
返回时,将执行该函数,并显示内部警报时的内容。
但正如Tony Barnes所说,我认为你可以在纯粹的Angular中实现这一点。不需要混合两者。
答案 2 :(得分:0)
在控制器中使用别名时
<div id="ExempleController" ng-controller="ExempleController as ctrl" ng-init="ctrl.AtletaLogado()">
你需要在Jquery中以这种方式打电话:
angular.element($('#ExempleController')).scope().ctrl.AlertFromJquery('PARAM1','PARAM2');
只需注册我的解决方案,我希望它有所帮助。