2017-06-05 75 views
0

我有一個運行良好的網頁,但在某個路徑上,它不會加載某些功能。例如,這是代碼:Angular:頁面加載後功能不運行

myApp.controller('people', ['$scope', function($scope) { 

    $scope.$watch('$viewContentLoaded', function(){ 
     console.log('la 1'); 

     $scope.allPeople = function() { 
      // This does not run when refreshed at https://www.website.com/people 
      console.log('la 2'); 
     } 
    }) 
]); 

此具有相同的行爲,la 1作品,而不是la 2

myApp.controller('people', ['$scope', function($scope) { 
    console.log('la 1'); 
    $scope.allPeople = function() { 
     console.log('la 2'); 
    } 
}]); 

這些路線:

myApp.config(function($routeProvider) { 
    $routeProvider 
    .when('/', { 
     templateUrl: '../../templates/all.html', 
     controller: 'all' 
    }) 
    .when('/people', { 
     templateUrl: '../../templates/people.html', 
     controller: 'people' 
    }) 
}); 

當我加載https://www.website.com和導航到People選項卡,它會加載人員列表。但是,當我在People選項卡中加載頁面WHILE時,頁面將加載,但沒有列表:我看到la 1已打印,而不是la 2

如何在從/people更新時運行allPeople

+0

你在使用什麼路由模塊? 告訴我們如何設置路線。 –

+0

@eranotzap,完成 –

+0

ok沒有任何聲明allPeople函數只聲明它。 –

回答

1

原因是你只聲明瞭函數但從未執行它。

myApp.controller('people', ['$scope', function($scope) { 

    $scope.allPeople = function() {   
      console.log('la 2'); 
    } 

    $scope.$watch('$viewContentLoaded', function(){ 
     console.log('la 1');   
     $scope.allPeople(); 
    }); 
]); 

此外,不要每次路由時都聲明它。 不要忘記取消註冊手錶(謝謝@NainishModi)。

myApp.controller('people', ['$scope', function($scope) { 

    $scope.allPeople = $scope.allPeople || function() {   
      console.log('la 2'); 
    } 

    var deReg = $scope.$watch('$viewContentLoaded', function(){ 
     console.log('la 1');   
     $scope.allPeople(); 
    }) 

     //deRegister watch 
     $scope.$on('$destroy', deReg); 
]);