2015-03-03 1 views
0

Я пытаюсь получить динамические данные из json в соответствии с результатами $http, но это не работает для меня. Я думаю, что проблема связана с обратным вызовом. Я имею в виду, что код запускается на json-результаты, когда мои $http продолжают работать. Это мой Javascript код:json не работает для меня в угловом

var operation_types = operation_types = [ 
    {nav_id: 1, nav_name: "Validation", nav_src: "validation", nav_href: "validation_list"}, 
    {nav_id: 2, nav_name: "Guests", nav_src: "guests", nav_href: "guests_list"} 
]; 

angular.module("mainApp", ["kendo.directives"]) 
    .controller("HomepageCtrl", function ($scope,$http) {//Homepage 
     /*receive user properties*/ 
     $http({ 
      url: 'API/v1/User/GetUserInfo', 
      method: "GET", 
      headers: { 'Content-Type': 'application/json' } 
     }).success(function (data, status, headers, config) { 
      if (data.Code != 1) { 
       $scope.error = "Please enter valid username and password!"; 
      } else { 
       console.log(data); 
       if(data.viewGuest==true&&data.viewValidation==true){ 
        $scope.source =operation_types; 
       }else if(data.viewGuest==false){ 
        source = operation_types[0]; 
       }else if(data.viewValidation==false){ 
        source = operation_types[1]; 
       } 

       //window.location.href = "homepage.html"; 
      } 
     }).error(function (data, status, headers, config) { 
      $scope.error = "There are problems with connection to server. Status:" + status + " Please, try to connect later."; 
      $scope.validationClass = "invalid"; 
     }); 
     $scope.source =operation_types; 

    }) 

Это соответствующий фрагмент моего HTML кода (с кендо UI):

<kendo-mobile-list-view k-data-source="source"> 
      <div class="product" k-template> 
       <a href="\#{{dataItem.nav_href}}"> 
        <img src="images/{{dataItem.nav_src}}.jpg" alt="{{dataItem.nav_name}} image" class="pullImage"/> 
        <h3>{{dataItem.nav_name}}</h3> 
       </a> 
      </div> 
     </kendo-mobile-list-view> 

Знает ли кто, как сделать это в угловой?

+0

Я должен хранить 'var operation_types;' внутри контроллера как '$ scope.source = [];' – Saqueib

+0

Замечание по архитектуре: получение данных не должно выполняться непосредственно в контроллере, а в сервисе или на заводе. вы затем получаете доступ к службе, хотя контроллер. см. http: // stackoverflow.ком/вопросы/17646034/что-это-на-передовой опыт-для решений-ан-АЯКС-вызов в-углового-JS – Alex

ответ

0

некоторые общие вещи, чтобы рассмотреть следующие вопросы:

  • Ваш код не используется только ваниль угловатый, но и третья сторона библиотека стороне клиента управления (Telerik Kando)
  • ли связывание работа, если данные установить прямо в исходники json?
  • Пожалуйста, обратитесь к примеру использования кендо-подвижный список ракурса на http://demos.telerik.com/kendo-ui/mobile-listview/angular

  • Вы уверены, что запрос Ajax поступает на сервер?

  • Вы уверены, что возврат JSON - это то, что вы ожидаете (используйте сеть монитор в инструментах разработчика в вашем браузере по выбору, чтобы узнать, F12 обычно)?

Редактировать

Также

В

if(data.viewGuest==true&&data.viewValidation==true){ 
        $scope.source =operation_types; 
       }else if(data.viewGuest==false){ 
        source = operation_types[0]; 
       }else if(data.viewValidation==false){ 
        source = operation_types[1]; 
       } 

Иногда вы установите источник на $ объем

$scope.source =operation_types; 

и другие установить локальную переменную с именемисточник.

source = operation_types[1]; 

вы имели в виду установить

$scope.source 

На 2-в прошлом 'если' ветви?

Другое дело:

$ HTTP вызов asynchrounus. Так что если вы Мент присвоить начальное значение

$scope.source 

то это лучше сделано перед вызовом AJAX, в противном случае вы рискуете состояние гонки.