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-controller
directive가 있는 경우 템플릿페이지에서 지정합니다.
같은 문제가 발생했는데, 부트스트랩을 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
'programing' 카테고리의 다른 글
콜백 함수에서 jQuery Ajax 요청 URL에 액세스하다 (0) | 2023.04.05 |
---|---|
루트 네브링크는 항상 액티브클래스 React Router Domain을 가져옵니다. (0) | 2023.04.05 |
CSS 또는 jQuery에서 단어 사이의 줄 바꿈과 구두점을 방지하려면 어떻게 해야 합니까? (0) | 2023.04.05 |
국가/스토어에서 레독스가 기능을 통해 물건을 얻는 방법은 무엇입니까? (0) | 2023.04.05 |
AngularJS - 백엔드에서 프런트엔드로 값 전달 (0) | 2023.04.05 |