2013-10-26 2 views
2

Я новичок в Angular JS, и у меня есть базовое приложение с угловым выражением, которое просто устанавливает объект области, устанавливает несколько функций для инициализации/создания объекта области. Когда я использую console.log в своей функции, он сообщает значения $ scope, установленные в конце функции scope, а не значения объекта scope в момент console.log. Я уверен, что это основная проблема с исполнением, и я был бы признателен за любое объяснение или помощь в этой проблеме.console.log в AngularJS, выполняющемся после функции scope

Вот угловой код:

var module = angular.module('my-app', []); 

function MainController($scope) 
{ 
    $scope.testDict = {}; 

    $scope.createNewTestDict = function(){ 
     $scope.testDict.test1 = {1: false, 2: false, 3: false} 
    } 

    $scope.initializeDict = function(){ 
     $scope.createNewTestDict(); 
     console.log($scope.testDict); 
     $scope.testDict.test1 = {1: true, 2: true, 3: true} 
    } 

    $scope.initializeDict(); 
} 

JSFiddle Здесь: http://jsfiddle.net/U6ZKr/7/

Таким образом, вы заметите, что console.log в реальном объекте области видимости в момент журнала должны быть все значения ложных , но они выходят все верно, что было установлено после console.log.

Заранее благодарим за вашу помощь!

ответ

8

Поскольку $ scope.testDict передается как ссылка на console.log, и он оценивается асинхронно, значение может быть неточным.

Альтернативный способ использования console.log(JSON.stringify($scope.testDict)); для просмотра результата.

1

Похоже, что это особенность в том, как работают инструменты dev.

Попробуйте выполнить регистрацию $scope.testDict.test1, и вы увидите нужные значения.

Моя догадка заключается в том, что содержимое глубоких объектов, которые вы регистрируете, не оценивается, пока вы не нажмете маленький треугольник, чтобы открыть их и заглянуть внутрь. В этом случае, если вы его осмотрите, вы уже изменили содержимое.

+0

Ahhh да! Спасибо, я думаю, так как я никогда не регистрировал данные, которые так часто меняются, я не сталкивался с этой проблемой. Хороший глаз! – Skylude

0

Вы принимаете неверное предположение о том, что отладчик Chrome console.log сразу получает значение. Он будет регистрировать его, но асинхронно.

Вы можете использовать отладчик сценариев Google Chrome для входа и просмотра этого эффекта.

+0

Я бы надеюсь, что console.log в конечном итоге запустит правильные значения, но в тот момент, когда я сделал вызов console.log - я использовал вышеприведенный ответ и зарегистрировал элемент напрямую по всему словарю, а значения - как я ожидать. Все еще интересно, если console.log будет записывать обновленные значения вместо тех, которые возникают при вызове console.log, как предложил Эдмар в другом ответе, это может быть из-за передачи ссылки против фактического объекта. Спасибо за ваше время!! – Skylude

Смежные вопросы