2015-01-29 3 views
0

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

, так что я просто

$scope.user = userFactory.getUser(); 

Мой пользователь втягиваться с завода

А потом в функции мыши я изменить его на что-то другое, имея пользователю нажать на кнопку, как так

$scope.swapUserTest = function(){ 
    $scope.user = {'name' : 'new'} 
} 

А потом я пытаюсь просто посмотреть, изменится ли он - это право не просто в щелчке, в будущем это будет из нескольких разных вещей, поэтому я бы хотел, чтобы ват ch над ним, поэтому всякий раз, когда он меняет мою функцию, срабатывает. Что-то вроде этого:

$scope.$watch($scope.user, function() { 
    console.log("changed") 
}); 

Так что я предполагал, когда $ scope.user изменил это будет стрелять, но это, кажется, только стрелять, когда он первым входит контроллер образуют завод. Здесь можно использовать некоторые рекомендации. Спасибо!

+3

$ сфера. $ Часы ('пользователь', функция() { – dave

+0

@ Dave спасибо !!! – ajmajmajma

ответ

4

Вы можете либо указать свойство объекта:

$scope.$watch('user', function(newValue, oldValue) { 
    // do something 
}); 

или вы можете задать функцию, которая возвращает значение, которое вы смотрите:

$scope.$watch(function() { 
    return $scope.user; 
}, function(newValue, oldValue) { 
    // do something 
}); 
1

Чтобы посмотреть свойство сферы , установите его как первый параметр для функции $ watch. Примечание: когда вы смотрите объект, ваши часы вызывают только тогда, когда изменяется весь объект, а не когда изменяется свойство этого объекта. например:

$scope.user = {"username": "john", "email": "[email protected]"}; 
$scope.$watch("user", function(user) { 
    console.log("users email now is:", user.email); 
}); 

$timeout(function() { 
    $scope.user = {"username": "jack", "email": "[email protected]"}; 
}, 1000); 

$timeout(function() { 
    $scope.user.email = "[email protected]"; 
}, 2000); 

// after one second console outputs 
// [email protected] 
//after 2 seconds ... nothing, even though user object's email has changed. 

Чтобы «глубоко смотреть» объект, установить третий параметр Вашего $ часов, чтобы быть правдой. $ watch ("property_name", callback_function, true);

Или, если вы хотите посмотреть определенное свойство объекта, используйте

$scope.$watch("user.email", function(email) { 
    console.log("user.email watch called with:", email); 
}); 
/* 
outputs both 
user.email watch called with: [email protected] 
users.js:60 user.email watch called with: [email protected] 
*/ 
Смежные вопросы