2015-01-19 7 views
0

я могу заставить его работать, когда жестко прописывать данные, как это:Как подтолкнуть JSON в гнездовой массив - angularjs

$scope.ChatHistory=[]; 
$scope.ChatHistory.push({ 
     IsCustomer: false, 
     UserText: "Please enter the category you are looking for.", 
     OptionItems: [ 
      { OptionId: "", SortOrder: "1", OptionName: "Complaint" }, 
      { OptionId: "", SortOrder: "2", OptionName: "Registration" }, 
      { OptionId: "", SortOrder: "3", OptionName: "Enquiry" } 
     ] 
    }); 

HTML:

<ul> 
    <li ng-repeat="objHistory in ChatHistory track by $index" 
     ng-class="{'user': objHistory.IsCustomer, 'desk': !IsCustomer}"> 
     {{ objHistory.UserText }} 
     <p ng-repeat="opt in objHistory.OptionItems track by $index"> 
     {{ opt.SortOrder }} {{ opt.OptionName }} 
     </p> 
    </li> 
</ul> 

Теперь я получаю данные из БД, как это:

$scope.GetData = function (categoryId) { 
     DataFactory.GetData(categoryId) 
     .success(function (data,status) {    
      $scope.ChatHistory.push(data); 
      console.log(data); 
     }) 
     .error(function (data, status) {       
     }); 
    } 

// журнала консоли

"{\"IsCustomer\":false, 
    \"UserText\":\"\", 
    \"OptionItems\":[ 
    {\"OptionId\":1,\"SortOrder\":1,\"OptionName\":\"Complaint\"}, 
    {\"OptionId\":2,\"SortOrder\":2,\"OptionName\":\"Request\"}, 
    {\"OptionId\":3,\"SortOrder\":3,\"OptionName\":\"Enquiry\"} 
    ] 
}" 

Как переместить эти данные в массив «ChatHistory». $ scope.ChatHistory.push (данные) не работает. Нет ошибки, но ничего не отображается в html.

+0

После применения изменений применяется область применения (i.o.w. $ scope. $ Apply())? –

+0

Вы объявили ChatHistory как массив, чтобы вы могли нажать на него? '$ scope.ChatHistory = [];' –

+0

Я думаю, что область применения применяется. Я проверил console.log ($ scope.ChatHistory) – Qwerty

ответ

2

Кажется, что ваш объект JSON возвращается в виде строки. В коде, который извлекает данные из БД, вы сначала возвращаете массив? Если это так, вы можете запустить этот массив и вручную сохранить каждое поле в свой собственный созданный объект JSON, тем самым гарантируя, что вы эффективно отправляете и получаете действительный JSON.

Если это не сработает (возможно, это означает, что Angular преобразует JSON в строку во время передачи), тогда вы можете просто использовать JSON.parse для данных переменных (вывод журнала консоли, который является строка). Однако вам придется избавиться от новых строк:

JSON.parse("{\"IsCustomer\":false, \"UserText\":\"\", \"OptionItems\":[ {\"OptionId\":1,\"SortOrder\":1,\"OptionName\":\"Complaint\"}, {\"OptionId\":2,\"SortOrder\":2,\"OptionName\":\"Request\"}, {\"OptionId\":3,\"SortOrder\":3,\"OptionName\":\"Enquiry\"}]}") 

, который должен предоставить вам ваш объект JSON.

+0

Спасибо. Ур предложил работать, но мне пришлось разобрать его дважды. Только тогда он работает, иначе он не отображает данные '$ scope.ChatHistory.push (JSON.parse (JSON.parse (data))); – Qwerty

0

Я не думаю, что вы должны нажать объект данных в ChatHistory. Просто попробуйте присвоить следующее:

$scope.ChatHistory = data; // this is the data that is returned from server call. 
+0

Это не сработало. Он добавляет только пустые лики. А также, chatHistory - это массив и похож на stringbuilder. Каждый раз, когда появляется новый набор «данных», он должен быть добавлен к существующим. – Qwerty

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