2017-08-30 215 views
2

我希望在页面完全加载后立即执行此功能。在AngularJS中完全加载页面后执行函数

vm.pointInvoice =() => { 
    if ($stateParams.property == "INVOICE") { 
     vm.invoiceEdit($stateParams.checkin) 
     vm.invoiceFocus = true; 
     vm.receiptFocus = false; 
    } 
} 

如果我把这个功能作为一个按钮(只是为了测试它),一切完美

<button ng-click="vm.pointInvoice()">OPEN AND POINT TO INVOICE</button> 

但是,无论我做什么 - 我根本无法得到这个自动执行我的功能(当页面完全加载并且所有数据/元素都可用时)。

幸运我堆栈溢出有很多关于页面完全加载的帖子,所以我尝试了一大堆他们但都没有工作,他们都在页面仍然空白时触发该功能。

这些都是一些我已经试过的国家:

$scope.$on('$viewContentLoaded', function(){ 
    debugger; 
}); 

angular.element(document).ready(function() { 
    debugger; 
}); 

$scope.$on('$stateChangeSuccess', function() { 
    debugger; 
}); 

所以我留下唯一的想法是做一些丑陋的setTimeout(function(){ vm.pointInvoice() }, 3000);技巧,但对我来说那是一个有点像放弃:-D

有必须是某种方式来启动页面完全加载时的功能....

回答

2

您可能需要使用ng-init指令:

<div ng-init="init()">...</div> 

定义这个功能是你的控制器:

$scope.init = function() { 
    alert("Page is fully loaded!); 
} 

无论如何,你可以从你的控制器直接调用此函数。一旦应用程序和控制器加载完成,它将被调用。

+0

我也会试试看 – torbenrudgaard

+1

我把它添加到我需要的功能去和做的东西表火灾 - 和有效!!!非常感谢你@Mistralis! '

torbenrudgaard

0

您是否尝试使用正确的angular事件?

角< 1.6.x版

angular.element(document).ready(function() { 
    alert('page loading finshed'); 
}); 

角> = 1.6.x版

angular.element(function() { 
    alert('page loading finshed'); 
}); 
+1

是试过了,但是当页面仍是空白(因为某些原因) – torbenrudgaard

0

你有没有尝试过Angular JS以外的东西?

$(document).ready(function(){ /*code*/ }); //with jQuery 

document.addEventListener('DOMContentLoaded', function(){ /*code*/ }); 
相关问题