[angularjs] 페이지로드시 AngularJS 컨트롤러 기능을 실행하는 방법은 무엇입니까?

현재 Angular.js 페이지를 검색하고 결과를 표시 할 수 있습니다. 사용자는 검색 결과를 클릭 한 다음 뒤로 버튼을 클릭합니다. 검색 결과를 다시 표시하고 싶지만 검색을 실행하는 방법을 알아낼 수 없습니다. 세부 사항은 다음과 같습니다.

  • My Angular.js 페이지는 검색 필드와 검색 버튼이있는 검색 페이지입니다. 사용자는 쿼리를 수동으로 입력하고 버튼을 누르면 Ajax 쿼리가 시작되고 결과가 표시됩니다. 검색어로 URL을 업데이트합니다. 모든 것이 잘 작동합니다.
  • 사용자가 검색 결과를 클릭하면 다른 페이지로 이동합니다.
  • 사용자가 뒤로 버튼을 클릭하고 내 각도 검색 페이지로 돌아 가면 검색어를 포함한 올바른 URL이 표시됩니다. 모두 잘 작동합니다.
  • 검색 필드 값을 URL의 검색어에 바인딩 했으므로 예상 검색어가 포함됩니다. 모두 잘 작동합니다.

사용자가 “검색 버튼”을 누르지 않아도 검색 기능을 다시 실행하려면 어떻게해야합니까? jquery 인 경우 documentready 함수에서 함수를 실행합니다. Angular.js에 해당하는 것을 볼 수 없습니다.



답변

한편으로 @ Mark-Rajcok은 개인 내부 기능으로 도망 갈 수 있다고 말했습니다.

// at the bottom of your controller
var init = function () {
   // check if there is query in url
   // and fire search in case its value is not empty
};
// and fire it after definition
init();

또한 ng-init 지시문을 살펴볼 수 있습니다 . 구현은 다음과 같습니다.

// register controller in html
<div data-ng-controller="myCtrl" data-ng-init="init()"></div>

// in controller
$scope.init = function () {
    // check if there is query in url
    // and fire search in case its value is not empty
};

그러나 각도 문서는 (v1.2 이후) 사용하지 않기 때문에 주의하십시오 ng-init. 그러나 imo는 앱의 아키텍처에 따라 다릅니다.

ng-init백엔드에서 각도 앱으로 값을 전달하려고 할 때 사용했습니다 .

<div data-ng-controller="myCtrl" data-ng-init="init('%some_backend_value%')"></div>


답변

이 시도?

$scope.$on('$viewContentLoaded', function() {
    //call it here
});


답변

나는 $viewContentLoaded나를 위해 일할 수 없었고 ng-init실제로 ng-repeat(문서에 따르면) 에만 사용해야 하며 컨트롤러에서 직접 함수를 호출하면 코드가 아직 정의되지 않은 요소에 의존하는 경우 오류가 발생할 수 있습니다 .

이것이 내가하는 일이며 나를 위해 일합니다.

$scope.$on('$routeChangeSuccess', function () {
  // do something
});

하지 않는 한 당신이 사용하고 ui-router. 그런 다음 :

$scope.$on('$stateChangeSuccess', function () {
  // do something
});


답변

angular.element(document).ready(function () {

    // your code here

});


답변

Dimitri ‘s / Mark의 솔루션이 저에게는 효과가 없었지만 $ timeout 함수를 사용 하면 마크 업이 렌더링 된 후에 만 ​​코드가 실행되도록하는 것이 좋습니다.

# Your controller, including $timeout

var $scope.init = function(){
 //your code
}

$timeout($scope.init)

도움이 되길 바랍니다.


답변

viewContentLoaded DOM 객체를보고 변경 한 후 수행하려는 경우이 작업을 수행 할 수 있습니다. $ scope. $ on을 사용하면 라우팅에 하나의 페이지 모드가있는 경우 특히 다르게 작동합니다.

 $scope.$watch('$viewContentLoaded', function(){
    // do something
 });


답변

각도의 $ window 객체를 사용할 수 있습니다.

$window.onload = function(e) {
  //your magic here
}