Выполнение функции после полной загрузки страницы в 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>

Но что бы я ни делал - я просто не могу заставить это выполнять мою функцию автоматически (когда страница полностью загружена и все данные/элементы доступны).

К счастью, у Stack Overflow было много сообщений о полностью загруженной странице, поэтому я перепробовал целую кучу из них, но ни один из них не работает, все они запускают функцию, пока страница остается пустой.

Вот некоторые из тех, что я пробовал:

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

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

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

Так что у меня осталась единственная идея - сделать какой-нибудь уродливый setTimeout(function(){ vm.pointInvoice() }, 3000); хак, но для меня это все равно, что сдаться :-D

ДОЛЖЕН быть какой-то способ отключить функцию, когда страница полностью загружена....


person torbenrudgaard    schedule 30.08.2017    source источник


Ответы (3)


Вы можете использовать директиву ng-init:

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

Define this function is your controller:

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

В любом случае, вы можете вызвать эту функцию прямо с вашего контроллера. Он будет вызван после загрузки приложения и контроллера.

person Mistalis    schedule 30.08.2017
comment
я попробую - person torbenrudgaard; 30.08.2017
comment
Я добавил его в таблицу, где мне нужна была функция, чтобы идти и делать что-то - и ЭТО РАБОТАЛО!!! Большое спасибо @Mistralis!! <table class="book-table book-table-gray" ng-if="vm.invoiceRecord[0]._id" ng-cloak="" ng-init="vm.pointInvoice()"> - person torbenrudgaard; 30.08.2017

Вы пытались использовать правильное событие angular?

Угловой ‹ 1.6.X

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

Угловой >= 1.6.X

angular.element(function () {
    alert('page loading finshed');
});
person rakwaht    schedule 30.08.2017
comment
Да, уже пробовал, но срабатывает, когда страница еще пуста (по какой-то причине) - person torbenrudgaard; 30.08.2017

Вы пробовали что-то вне Angular JS?

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

document.addEventListener('DOMContentLoaded', function(){ /*code*/ });
person Luiz Paulo    schedule 30.08.2017