2014-11-28 1 views
1

Я использую Angular 1.3. Я изменил свой код, чтобы использовать Controller as, используя $ scope. У меня есть URL:

http://localhost:3640/api/v1/topics

Это получает следующее:

JSON
[ 
    { 
    topicId: 17, 
    title: "This is another BRAND SPANKIN new topic", 
    body: "This is a message in the body of another topic ftw!", 
    created: "2014-11-27T05:37:49.993", 
    replies = null 
    }, 

    { 
    topicId: 18, 
    title: "This is another BRAND new topic", 
    body: "This is a message in the body of a topic wow!", 
    created: "2014-11-27T05:37:49.993", 
    replies = null 
    } 
] 

У меня также есть страница под названием индекс-home.js

var app = angular.module("myApp", []); 

app.controller("homeIndexController", ["$http", function ($http) { 

    var msg = this; 
    msg.dataCount = 0; 
    msg.replies = []; 

    $http.get("/api/v1/topics?includeReplies=true") 
     .success(function(data) { 
      //Success 
      msg.replies = data; 
     }) 
     .error(function() { 
      //Error 
      alert('error/failed'); 
     }); 

}]); 

На моей странице I используйте следующие привязки:

<div id="ngController" ng-controller="homeIndexController as hic"> 
    ... 
    <h3>Message count: {{hic.dataCount}}</h3> 
    ... 
    <div class="message row" data-ng-repeat="i in hic.data"> 
    <div class="title">{{i.title}}</div> 
    <div class="date">{{i.created}}</div> 
    <div class="contents">{{i.body}}</div> 
</div> 

Я знаю, что URL-адрес в $ http работает, потому что я попробовал его сам в браузере и скрипаче, и он вернул json. Но когда я использую его в своем угловом приложении, я получаю результат .error (который является предупреждением о FAIL.

Я попытался удалить http://localhost:3640 и просто использовать /api/v1/topics, когда я это сделаю, я не получаю результат ошибки больше. Я знаю, что мой контроллер работает и привязку к странице, потому что я вернусь 0 для dataCount.

Что я делаю неправильно в методе $http? является ли мой синтаксис не так?

+0

Перейдите на страницу инструментов Chrome, вкладку «Сеть» и посмотрите, запущен ли запрос из браузера. если да, проверьте данные запроса и поток ответов. –

+0

@MadhavanKumar Да, вызов сделан, и json возвращается в ответ. –

+0

Благодарим вас за помощь @MadhavanKumar, что вы заставили меня идти по пути, который я совершенно откровенно не использовал для моей отладки. проверяя инструменты F12, чтобы увидеть ответ на данные и т. д. Но проблема была на самом деле очень глупо. Я просил «ng-repeat =» i в hic.data «вместо« ng-repeat = »i в hic.отвечает «явно ошибка новобранец, но трудно поймать, потому что один заострен на другом. Таким образом, практически не было смысла, что я делал, не присмотревшись к коду. Обычно это проблема в JavaScript. У нас нет компилятора или типов чтобы помочь нам там и сказать, что придурок, который вы называете неправильным. –

ответ

1

ошибки в ваших нг -repeat. У вас нет переменной данных в вашей области. Измените hic.data на hic.replies, и она будет работать.

<div id="ngController" ng-controller="homeIndexController as hic"> 
    ... 
    <h3>Message count: {{hic.dataCount}}</h3> 
    ... 
    <div class="message row" data-ng-repeat="i in hic.replies"> 
    <div class="title">{{i.title}}</div> 
    <div class="date">{{i.created}}</div> 
    <div class="contents">{{i.body}}</div> 
</div> 
+0

Я собираюсь отметить ваш как правильный, хотя я сам ответил 12 минут назад. lol –

+0

(последний комментарий выше). скорее дайте вам несколько очков, чтобы найти время, чтобы понять это и т. д. вместо того, чтобы быть рывком и правильно пометить мой собственный ответ. Но я обещаю, что ответа не было, когда я начал отвечать на него сам. –

0

Хорошо чувак, это настоящая новобранец ошибка, посмотрите на ваш контроллер:

app.controller("homeIndexController", ["$http", function ($http) { 

    var msg = this; 
    msg.dataCount = 2; 
    msg.replies = []; 

    $http.get("/api/v1/topics") 
     .success(function(data) { 
      //Success 
      msg.replies = data; 
     }) 
     .error(function() { 
      //Error 
      alert('eror/failed'); 
     }); 

}]) 

Вы устанавливаете this в msg, затем установить msg.replies равным data, если успех.

Это нормально.

Ваша проблема, то приходит в ваш нг-повтора, когда вы говорите:

<div data-ng-repeat="i in hic.data"> 

hic.data не существует. data был предметом, возвращенным с .success(function())$http.get. Затем вы берете data и назначаете его msg.replies. Таким образом, ваш ng-repeat="" должен выглядеть следующим образом:

<div data-ng-repeat="i in hic.replies"> 

Понимаете? Это основной материал ... Я, я имею в виду, вы должны чувствовать себя глупо.