2017-03-22 5 views
1

に私が放送でデータを送信するとき、私はこの問題を取得するには、ここに私のコードは次のとおりです。コードの

$rootScope.$broadcast('myEvent',{ 
    data:"value" 
}); 

と私:

$scope.$on('myEvent', (event, args) => { 
    $scope.data = args.data; 
    console.log($scope.data); 
    }); 
    console.log($scope.data); 

問題がされ、関数内のconsole.logに値が表示されますが、外には私が定義されていないものがあります。ありがとう。 myEventがトリガされると、それを実行することを意味し

(event, args) => { 
    $scope.data = args.data; 
    console.log($scope.data); 
} 

+6

外部のコードは内部のコードより前に実行されるため、最初は定義されていません –

答えて

0

あなたのコードのこの部分は、非同期コールバックです。第2のconsole.log()は、スクリプトとその特定の行がブラウザによってロードされ、コードのこの部分が非同期ではなく同期しているときにすぐに実行されます。この場合、イベントがトリガーされる前にコードが完全にロードされるため、「第2の」console.log()は「最初の」イベントの前に実行されます。

how callbacks workについて少しお伝えすることをお勧めします。これは、javascriptを使用する際のコアパターンの1つであり、将来の作業の中でコールバックがどのように機能するかを理解するのに役立ちます。

関連する問題