2015-09-04 5 views
0

На мой взгляд, я привязываюсь к свойству службы, что свойство службы привязано к другому свойству службы.Почему мои свойства сервиса не обновляются?

Проблема заключается в том, что ни одно свойство службы не обновляется, когда я изменяю его в представлении. Может ли кто-нибудь пролить свет, пожалуйста?

Вот plunker: http://plnkr.co/edit/D0YMzD?p=preview

Контроллер:

myApp.controller('Ctrl', ['$scope', 'serviceOne', function($scope, serviceOne) { 

    var ctrl = this; 

    ctrl.val = serviceOne.val; 

    $scope.$watch(function() { 
     return ctrl.val; 
    }, function() { 
     console.log('ctrl says val=' + ctrl.val); 
    }, true); 

}]); 

serviceOne:

myApp.service('serviceOne', ['serviceTwo', '$rootScope', function (serviceTwo, $rootScope) { 

    var sOne = this; 

    sOne.val = serviceTwo.val; 

    $rootScope.$watch(function() { 
     return sOne.val; 
    }, function() { 
     console.log('sOne says val=' + sOne.val); 
    }, true); 

}]); 

serviceTwo:

myApp.service('serviceTwo', ['$rootScope', function ($rootScope) { 

    var sTwo = this; 

    sTwo.val = "hello"; 

    $rootScope.$watch(function() { 
     return sTwo.val; 
    }, function() { 
     console.log('sTwo says val=' + sTwo.val); 
    }, true); 

}]); 
+0

где вы обновляете значение для обслуживания? –

+0

Первое место, почему вы хотите две службы? почему нет двух переменных в одном сервисе, если это необходимо. –

+0

serviceOne - это всеобъемлющий сервис, который внедряет ряд различных сервисов с общими API и выполняет операции над их моделями. Пример, который я опубликовал, был голой костью того, что я делаю. –

ответ

2

Это «всегда есть точка в вашей модификация эль ". Вы передаете строки, а не ссылки на объекты. Это работает:

var myApp = angular.module('myApp', []); 

myApp.controller('Ctrl', ['$scope', 'serviceOne', function($scope, serviceOne) { 

    var ctrl = this; 

    ctrl.val = serviceOne.val; 

    $scope.$watch(function() { 
     return ctrl.val; 
    }, function() { 
     console.log('ctrl says val=' + ctrl.val.s); 
    }, true); 

}]); 

myApp.service('serviceOne', ['serviceTwo', '$rootScope', function (serviceTwo, $rootScope) { 

    var sOne = this; 

    sOne.val = serviceTwo.val; 

    $rootScope.$watch(function() { 
    return sOne.val.s; 
    }, function() { 
    console.log('sOne says val=' + sOne.val.s); 
    }, true); 

}]); 

myApp.service('serviceTwo', ['$rootScope', function ($rootScope) { 

    var sTwo = this; 

    sTwo.val = { s: "hello" }; 

    $rootScope.$watch(function() { 
    return sTwo.val.s; 
    }, function() { 
    console.log('sTwo says val=' + sTwo.val.s); 
    }, true); 

}]); 

и соответствующее изменение в шаблоне:

<div ng-controller="Ctrl as ctrl"> 
     <input ng-model="ctrl.val.s"></input> 
</div> 
+1

Arghhh, не могу поверить, что меня схватили! :) Я разместил [plunker] (http://bit.ly/1EESd1S), который ближе к моему фактическому приложению, и он все еще вызывает проблемы, я думаю, что это может быть связано, но не может понять, что проблема есть. Вторая услуга, опять же, не обновляется. Если кто-то может помочь, это будет очень признательно. –

+0

Typo с моей стороны, пожалуйста, проигнорируйте последний комментарий! –

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