У меня есть компонент чата, который имеет идентификатор хэша этого чата. Все мои вызовы api (сделанные службой) имеют хеш-значение. Когда я дважды вызываю компонент чата, значение хэш-функции службы первого чата перезаписывается чатом секунд.Угловое обслуживание переопределяет себя при вызове более одного раза
angular.module('testModule', [])
.controller('testController', function(testService, $scope) {
var vm = this;
vm.init = function() {
vm.hash = vm.hash();
testService.setHash(vm.hash);
}
vm.getServiceHash = function() {
vm.serviceHash = testService.hash;
}
vm.init();
})
.service('testService', function() {
var testService = {
hash: null
};
testService.setHash = function(hash) {
testService.hash = hash;
}
return testService;
})
.directive('test', function() {
return {
restrict: 'E',
template: $("#test\\.html").html(),
controller: 'testController',
controllerAs: 'test',
bindToController: {
hash: '&',
},
scope: {}
}
});
var app = angular.module('myApp', ['testModule']);
app.controller('myController', function($scope) {})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="myController">
<test hash="'123'"></test>
<test hash="'321'"></test>
</div>
<script type="text/ng-template" id="test.html">
<p>
<h2> Controller hash: {{test.hash}} </h2>
<button type="button" ng-click="test.getServiceHash()">Get service hash</button>
<h2> Service hash: {{test.serviceHash }} </h2>
</p>
</script>
</body>
Услуги создаются только один раз в Угловом. Если вам нужна ваша услуга, чтобы обслуживать более одного клиента (т. Е. Два ваших компонента чата), вам нужно будет адаптировать ваш сервис для этого. – jjmontes
Есть ли у вас какие-либо предложения @jjmontes? –
Это хороший вариант для ориентации объектов в угловом. Каждый из ваших вызовов хэша на ваш «сервис» может вернуть новый объект JS, который будет выделен для этого конкретного клиента. В AJS «услуга» - это просто «синтаксический сахар» на вершине «фабрики», и службы всегда являются синглонами, как упоминалось. Вот пример того, как вы можете создать фабрику объектов в AJS: http://blog.revolunet.com/blog/2014/02/14/angularjs-services-inheritance/ – MoMo