Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Связь данных сервиса и вьюхи (https://javascript.ru/forum/angular/57302-svyaz-dannykh-servisa-i-vyukhi.html)

Alex_D181 29.07.2015 08:17

Связь данных сервиса и вьюхи
 
Доброго времени суток. Возникла такая проблема. У меня есть сервис (фабрика), которая отвечает за данные, и передает их в контроллер, который выводит их на экран. Суть проблемы в том, что сервис успешно обновляет данные, но информация на экране не изменяется.

Теперь код. Простейшая HTML структура
<!DOCTYPE html>
<html lang="ru" ng-app="app">
<head>
    <meta charset="UTF-8">
    <title>Тестируем сервис</title>
    <script src="bower_components/angular/angular.min.js"></script>
    <script src="js/app.js"></script>
</head>
<body ng-controller="testCtrl">
 
<p>{{data}}</p>
</body>
</html>


var app = angular.module('app', []);
app.factory('dataService', function () {
    var data = {
        number: 1
    };
    function changeData() {
        var number = Math.floor(Math.random( ) * (359+1));
        data.number = number;
    };
    setInterval(changeData,1000);
    return data;
});
 
app.controller('testCtrl', function ($scope, dataService) {
    console.log(dataService);
    $scope.data = dataService.number;
});

ksa 29.07.2015 09:01

Цитата:

Сообщение от Alex_D181
но информация на экране не изменяется.

Ангулар просто не знает, что у тебя работает setInterval()...
Возьми за основу мой пример, потом используй свою фабрику...

<!DOCTYPE html>
<html ng-app="app">
<head>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251' />
<script src='http://code.jquery.com/jquery-latest.js'></script>
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
<link rel="stylesheet/less" type="text/css" href="style.less">
<script src="http://cdnjs.cloudflare.com/ajax/libs/less.js/2.5.0/less.min.js"></script>
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
var app = angular.module('app', []);

app.controller(
	'ctrl', 
	[
		'$scope',
		'$interval',
		function($scope,$interval) {
			$scope.data=1;
			$interval(function(){
				$scope.data=Math.floor(Math.random( ) * (359+1));
			},1000);
		}
	]
);
</script>
</head>
<body ng-controller="ctrl">
<p>{{data}}</p>
</body>
</html>


Часовой пояс GMT +3, время: 10:37.