source

함수는 내부 angularjs controller에서 두번 호출됩니다.

factcode 2023. 10. 31. 22:55
반응형

함수는 내부 angularjs controller에서 두번 호출됩니다.

저는 앵글 js를 처음 접하며 현재 매우 유선적인 종류의 버그를 가지고 있습니다.컨트롤러의 함수는 경로에 대해 로드된 뷰로 호출될 때 두 번 실행됩니다.

http://jsfiddle.net/4gwG3/5/

당신은 두번이나 경고를 보게 될 것입니다!!

저의 견해는 단순합니다.

제 앱 코드는 다음과 같습니다.

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

//channel controller
IB.controller('channelsController', function ($scope, $routeParams) {
    $scope.greet = function () {
        alert('hi');
    };
});


IB.config(function ($routeProvider) {
    $routeProvider
    .when('/channels', {
        controller: 'channelsController',
        template: '{{greet()}}'
    })

    .otherwise({ redirectTo: '/channels' });

});

먼저 Angular app을 두 번(ng-app으로 자동 초기화함으로써) 초기화하지 않는지 확인합니다.

한 번은 ng-app으로 html 페이지 2개(로그인.html용과 main.html용)를 가지고 있었는데 나중에 깨달은 문제였습니다.

둘째, 그리고 가장 중요한 것은 컨트롤러를 여러 요소에 부착했는지 확인하는 것입니다.라우팅을 사용하는 경우 일반적인 경우입니다.

제 경우 Dashboard Controller로 이동하는 방법은 다음과 같습니다.

app.config(function($routeProvider){
    $routeProvider
    .when('/', {
        controller: 'DashboardController',
        templateUrl: 'pages/dashboard.html'
    })
});

하지만 dashboard.html:

<section class="content" ng-controller="DashboardController">

앵귤러를 가르친 것은JS는 내 컨트롤러를 두 번 소화합니다.

이를 해결하기 위해서는 두 가지 방법이 있습니다.

html 파일에서 ng-controller를 제거하는 방법은 다음과 같습니다.

<section class="content">

또는 라우팅에서 컨트롤러를 제거합니다(일반적으로 app.js에 위치).

app.config(function($routeProvider){
$routeProvider
        .when('/', {
            templateUrl: 'pages/dashboard.html'
        })
    });

내 생각엔 보간법을 만들어서,{{greet()}}, 당신은 기능에 대한 시계를 만듭니다.greet. 이 기능은 다이제스트 사이클을 실행하는 횟수만큼 호출을 받을 수 있으므로 1회 또는 2회 실행하는 것은 문제가 되지 않습니다.따라서 함수가 호출되는 시간에 의존해서는 안 됩니다.

나는 당신이 여기서 무엇을 이루고자 하는지 모릅니다.경고 1에는 두 가지가 있습니다.언제.controller라고 합니다. 2.언제.template평가를 받습니다.

template뷰 부분을 제공하기 위한 것이지만, 이 경우 템플릿은 뷰를 생성하지 않는 함수를 평가하는 것에 불과합니다.

저도 같은 문제가 있어서 이렇게 했습니다.

$scope.init=function()
{
    if ($rootScope.shopInit==true) return;
    $rootScope.shopInit=true;
    ...
}
$scope.init();

마치 싱글톤처럼! (표시할때마다 아약스콜이 많아서 지루했어요)

언급URL : https://stackoverflow.com/questions/19608978/function-called-twice-inside-angularjs-controller

반응형