programing

AngularJs: $routeProvider를 사용하여 컨트롤러를 두 번 호출합니다.

telecom 2023. 4. 5. 21:16
반응형

AngularJs: $routeProvider를 사용하여 컨트롤러를 두 번 호출합니다.

모듈 루트:

var switchModule = angular.module('switchModule', []);

switchModule.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
    when('/build-content', {templateUrl: 'build-content.html', controller: BuildInfoController});
}]);

컨트롤러:

function BuildInfoController($http, $scope){
    alert("hello");
}

HTML:

<html ng-app="switchModule">
...
<body>
    <ul>
        <li><a href="#build-content"/></a></li>
    </ul>
    <div class="ng-view"></div>
</body>
...

하이퍼링크 '를 클릭할 때마다 'BuildInfoController'가 두 번 호출됩니다.내가 뭘 빠트렸나요?

나는 오늘도 같은 문제에 직면했다.$routeProvider와 html에 컨트롤러 이름을 추가했습니다.

$routeProvider
    .when('/login', {
            controller: 'LoginController',
            templateUrl: 'html/views/log-in.html'
     })

그리고 제 견해로는

<div class="personalDetails" ng-controller="LoginController"> </div>

뷰 또는 루트 프로브에서 컨트롤러 이름을 삭제할 수 있습니다.

저도 같은 문제가 있었습니다만, 라우팅에 바보 같은 버그가 있는 것 같습니다.무슨 리다이렉트 같은 것이 진행되고 있다.

수정하기 위해 href에 슬래시를 추가했을 뿐입니다.

<li><a href="#/build-content/"></a></li>

당신에게도 문제가 해결되길 바랍니다.

저도 비슷한 문제가 있었어요.루트에 후행 슬래시를 추가했지만 링크에서 예상대로 작동하지 않았습니다.

$routeProvider.
when('/build-content/',...);

이 마크업으로

<li><a href="/build-content">Content</a></li>

그리고 앵귤러JS는 브라우저의 URL을 $routeProvider에 정의된 URL로 수정합니다.

이상하게도 그 반대는 루트가 아닌 링크의 후행 슬래시에서도 기능하는 것처럼 보입니다.후행 슬래시가 해결 방법과 일치하지 않는 한 컨트롤러가 두 번 호출되지 않습니다.

저는 2개의 ng뷰 디렉티브가 있는 경우입니다.포장하려고 했는데 의도치 않게 중복되어 버렸습니다.

<div class="ng-view">
    <div ng-view></div>
</div>

포장지를 떼어내, 고쳤다.

를 삭제합니다.ng-controllerdirective가 있는 경우 템플릿페이지에서 지정합니다.

같은 문제가 발생했는데, 부트스트랩을 2번 각도로 하면 같은 에러가 발생할 수 있습니다.

저 같은 경우에는<body ng-app>하지만 또한angular.bootstrap(document,['app'])컨트롤러의 이중 초기화를 초래했습니다.

이렇게 하면 시간을 절약할 수 있을 거예요.

컨트롤러는 DOM의 여러 요소에 추가할 수 있기 때문에 이 문제가 발생할 수 있습니다.예를 들어 다음과 같습니다.

  <div id="myDiv1" ng-controller="myController" ....></div>
  ....
  <div id="myDiv2" ng-controller="myController" ....></div>

각 뷰에 대해 SomeController를 단일 상태로 선언했습니다.그것이 중복 이벤트 발사를 야기했다.

 .state('chat', {
            url: '/',
            views: {
                'content@': {
                    templateUrl: 'views/chat_wv1.html',
                    controller: 'ChatController'
                },
                'form@': {
                    templateUrl: 'views/chat_wv_placeholder.html',
                    controller: 'ViewController'
                },
                'sidePanel@': {
                     templateUrl: 'views/sidePanel_wv.html'
                     /* removing this part solved my issue*/
                     /*controller: 'ChatController'*/
                }

            }
        })

이게 다른 사람에게 도움이 되길 바랍니다.

저도 custom Directive에서 비슷한 문제가 발생하여 컨트롤러가 중복되었습니다.

<html>
   <body ng-app="MyApp" ng-controller="MyDirectiveCtrl">
      <my-directive></my-directive>
   </body>
</html>

angular.directive('myDirectivie', [function() {
   return {
         restrict: 'E',
         controller: 'MyDirectiveCtrl',

         ...

   }
}]);

바디 레벨에서 ng-controller 태그를 제거하여 해결했습니다.

여러 개의 UI 뷰가 있기 때문입니다.

언급URL : https://stackoverflow.com/questions/14442954/angularjs-controller-is-called-twice-by-using-routeprovider

반응형