2015-10-23 3 views
0

без псевдонима ngcontroller, я могу получить данные. Однако, когда с псевдонимом, я наклоняю. Может ли кто-нибудь указать мою ошибку здесь?Атрибут отображения ngrepeat из псевдонима ngcontroller

HTML-теги:

<div style="padding: 10px" id="content_dv" ng-controller="displaytopic_ctrl as f"> 
    <div class="topic_dv" ng-repeat="t in f.topic"> 
     <p>{{ t.MEMBER_NAME }}</p> 
    </div> 
</div> 

в app.js:

.controller('displaytopic_ctrl', ['$http', function($http) { 

    $http({ 
     method: 'get', 
     url: api_url + 'get_topic_list.php', 
     data: { 
      type: 'all' 
     } 

    }).success(function(d){  
     if(d.t=='p'){ 
      this.topic = d.topic; 
     } 
    }).error(
    function(){ 
     console.log('Query error'); 
    });  

}]); 
+0

'this.topic' не то, что вы думаете, что здесь. – Claies

ответ

0

Из-за способа JavaScript closures work, в this переменной, которую вы используете в вашем успехе обратного вызова не является контроллер. Наиболее часто используемый механизм для решения этого - создать псевдоним для контроллера, который вы можете ссылаться внутри своих обратных вызовов.

Для примера:

.controller('displaytopic_ctrl', ['$http', 
    function($http) { 
    var controller = this; 

    $http({ 
     method: 'get', 
     url: api_url + 'get_topic_list.php', 
     data: { 
     type: 'all' 
     } 

    }).success(function(d) { 
     if (d.t == 'p') { 
     controller.topic = d.topic; 
     } 
    }).error(
     function() { 
     console.log('Query error'); 
     }); 

    } 
]); 
+0

Вы также можете связать функцию анонов вашего обработчика успеха. Может оказаться полезным, если он не является жестко закодированным и по какой-то странной причине использует обратные вызовы и не возвращает обещание от службы. '.success (function (d) {// теперь это будет правильно} .bind (this))' Очевидно, что связанное вами значение будет зависеть от контекста. – ste2425