LINUX.ORG.RU

Почему функция внутри контроллера AngularJS возвращает какой-то мусор?

 , , кибертелепатия


0

1

Осваиваю Angular.

Есть роутер и контроллеры, в которых:

	var myApp = angular.module('myApp', ['ngRoute','ui.bootstrap']);
	myApp.config(function ($routeProvider) {
		$routeProvider
			.when('/',
				{
					controller: 'SimpleController',
					templateUrl: 'static/ng/v1.html'
				})
			.when('/p2',
				{
					controller: 'PagingController',
					templateUrl: 'static/ng/v2.html'
				})
			.otherwise({ redirectTo: '/'});
		});
		

  myApp.controller('PagingController', function($scope, $http) {
  getData(1,20);
  function getData(page, paging) {
    return $http.get("items?page="+page).then(function(response) {
    	result = response.data;
    	$scope.items = result;
        return(result);
      });
  }

js код пока в index.html, в нём же ng-view.

В static/ng/v2.html такой код:

<div ng-controller="PagingController">
<h4>Sample Server Pagination</h4>
<pagination total-items=2000 max-size=3 ng-model="currentPage" ng-change="pageChanged()" 
items-per-page="20" previous-text="<" next-text=">"></pagination>
<ul>
<li ng-repeat="item in items"><a href="iteminfo?id={{item.id}}">{{item.label}}</a></li>
</ul>
</div>

Внимание, ВОПРОС. Сейчас всё это работает как я хотел, НО! Изначально я хотел обновлять список items так:

$scope.items = getData(1,20);
- а функция getData() должна возвращать JSON объект. Фигушки, она возвращает НЁХ, зато унутри неё всё работает. Более того, она не зависимо от того, что я из неё возвращаю (хоть объект, хоть строку), возвращает НЁХ в виде не опознанного объекта.

Я ХОЧУ ЗНАТЬ, что происходит, и почему я предполагаю одно, а происходит другое. Со scope, как я понял, не связано - из функции ng-repeat отлично заполняется.

PS. LOR wiki открывается только когда я разлогинен, иначе «Произошла неизвестная системная ошибка. Сообщение об ошибке: java.lang.NullPointerException.» WTF?

★★★★★
getData(1,20)
  .success(function(items) {
    $scope.items = items;
  });

Называется это promise. Документация: https://docs.angularjs.org/api/ng/service/$q

Так же вместо вызовов $http в контроллере советую использовать angular-resource: https://docs.angularjs.org/api/ngResource/service/$resource. Кстати, с angular-resource можно сделать как ты хотел: http://stackoverflow.com/a/14180451

Black_Roland ★★★★
()
Последнее исправление: Black_Roland (всего исправлений: 2)
Ответ на: комментарий от Kilte

Я подозревал!

Т.е. функция getData у меня по сути - promise, я правильно понял? А потому она и не должна возвращать, и для сокращения «лапши», я идеологически правильно заполняю ng-repeat?

Shadow ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.