2015-05-13 4 views
0

На фабрике я это:наблюдающие объекты завода - angularjs

$http.get('/api/whatever').success(function(data) { 
    result = data.obj 
}); 

В контроллере я не могу наблюдать никаких изменений. Но я не должен, если я использую ссылку на result как:

angular.module('aModule') 
    .controller('TheCtrl', function ($scope, MyFactory) {  
    $scope.ifOnly = MyFactory.result; 
    }); 

В отличие, если я, например:

$http.get('/api/whatever').success(function(data) { 
    result.foo = 'foo'; 
    result.bar = 'bar'; 
}); 

Объект в контроллере получает изменение.

Вопрос в том, что ссылка должна быть замечена, но изменение значения не?

EDIT:

В контроллере я попытался:

$scope.$watch('MyFactory.result', function(newVal, oldVal){ 
    console.log('changed'); 
    console.log(oldVal); 
    console.log(newVal); 
}, true); 

Бревно:

changed 
undefined 
undefined 

..as окончательный ответ. Я просто не верю, что копирование значения объекта по значению - это путь.

ответ

0

Ссылки должны быть заменены, вы можете попробовать это:

result.obj = data.obj;

$scope.ifOnly = MyFactory.result.obj; 
+0

нет, его один и тот же вопрос. Я просто не понимаю, почему ссылка не замечена, а измененное значение. – Stefan

+0

"результат" есть новый адрес после результата = данные.obj – Nicol

+0

да, смотрю. Думаю ты прав. Но ваша рекомендация в любом случае приводит к такому же плохую репутацию :( – Stefan

0

Попробуйте эту модель

//factory 
getWhatever(){ 
    return $http.get('/api/whatever'); 
} 

//controller 
angular.module('aModule') 
    .controller('TheCtrl', function ($scope, MyFactory) {  
    MyFactory.getWhatever().then(function(data){ 
     $scope.ifOnly = data; 
    }); 
    }); 
Смежные вопросы