2014-11-14 2 views
0

Я хочу посмотреть одну из переменных $ rootScope.

Он работает и обновить бар, когда я явно зарегистрировать Бодрствующего:

$rootScope.$watch('foo', function(newVal) { 
    $scope.bar = newVal; 
}); 

Но это не обновляется, когда я просто назначить бар для обув $ rootScope в. Должно ли это нецелесообразно назначать наблюдателя для этого выражения?

$scope.bar = $rootScope.foo; 

Кстати, Foo изначально пустой объект, и она обновляется { «тест»: «что-то»} позже.

UPDATE

Теперь ясно, что это выражение не будет назначать Бодрствующего и обновлять себя. Итак, есть ли способ обновить бар без функции часов в контроллере?

Есть ли обещания для этой цели? Я думаю, что Restangular может сделать это следующим образом:

$scope.list = Restangular.all('accounts').getList().$object; 
+1

nope. Это просто задание. –

+0

Да, похоже, это был глупый вопрос :) Я обновил свой вопрос. – halilb

ответ

3

Нет, потому что это не так, как JavaScript работает. Если вы пытались что-то вроде этого снаружи угловатых, вы бы увидели, ничего не обновит:

var temp = 4; 
var temp2 = temp; 

temp = 5; 
console.log(temp2); //outputs 4 

Причина это работает для других вещей (например, объекты), потому что они ссылаются. Этот пример будет работать:

var temp = { value: 4 }; 
var temp2 = temp; 

temp.value = 5; 
console.log(temp2); //outputs { value: 5 } 

Редактировать

Не видя остальную часть вашего кода и на основе своего комментария, я буду считать, что вы уничтожили вашу ссылку. Хотя мой пример выше будет работать, этого не будет:

var temp = { value: 4 }; 
var temp2 = temp; 

temp = { value: 5 }; 
console.log(temp2); //outputs { value: 4 } 
+0

Спасибо, Мэтью, но мой foo действительно был объектом. Это начальное значение {}, а обновленное значение - {'label': 'test'}. Я все равно обновил свой вопрос. – halilb

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