프로그래밍 언어/HTML,CSS,JS

컨트롤러를 두 번 실행하는 AngularJS와의 전투

Rateye 2021. 7. 1. 10:08
728x90
반응형

 

질문 : 컨트롤러를 두 번 실행하는 AngularJS와의 전투

$watch 이벤트, 지속적으로 모델 상태 확인 등과 같은 일부 코드를 두 번, 때로는 더 많이 실행한다는 것을 이해합니다.

그러나 내 코드 :

function MyController($scope, User, local) {

var $scope.User = local.get(); // Get locally save user data

User.get({ id: $scope.User._id.$oid }, function(user) {
  $scope.User = new User(user);
    local.save($scope.User);
    });
    
    //...
    

두 번 실행되어 2 개의 레코드를 내 DB에 삽입합니다. 나는 오랫동안 이것에 대해 머리를 두드리는 동안 분명히 여전히 배우고 있습니다!

답변

앱 라우터는 다음과 같이 MyController 탐색을 지정했습니다.

$routeProvider.when('/',
                       { templateUrl: 'pages/home.html',
                                            controller: MyController });
                                            

그러나 나는 이것을 home.html 에도 가지고 있었다.

<div data-ng-controller="MyController">
                                            

이것은 컨트롤러를 두 번 소화했습니다. data-ng-controller 속성을 제거하면 문제가 해결되었습니다. 또는 controller: 속성이 라우팅 지시문에서 제거되었을 수 있습니다.

이 문제는 탭 탐색을 사용할 때도 나타납니다. 예를 들어 app.js 에는 다음이 포함될 수 있습니다.

.state('tab.reports', {
    url: '/reports',
    views: {
        'tab-reports': {
            templateUrl: 'templates/tab-reports.html',
            controller: 'ReportsCtrl'
        }
    }
})
                                                                                      

해당 보고서 탭 HTML은 다음과 유사 할 수 있습니다.

<ion-view view-title="Reports">
<ion-content ng-controller="ReportsCtrl">
                                                                                        

그러면 컨트롤러가 두 번 실행됩니다.

출처 : https://stackoverflow.com/questions/15535336/combating-angularjs-executing-controller-twice
728x90
반응형