2016-05-04 13 views
0

私は最近、AngularJSで新しく、controllerにエイリアスを使用して、$httpというレスポンスfactoryからデータを呼び出そうとしています。私は今何をやったか

は、それが以下のものです:

_discover.html

DiscoverService.js

var discoverService = angular.module('discover.services', []); 

discoverService.factory('discoverV', function ($http) { 
    return { 
    list: function(callback){ 
     $http.get('https://myurl.com/get/jsondata').success(callback); 
    } 
    }; 
}); 

DiscoverCtrl.js

var discoverModule = angular.module('discover', ['discover.services']); 

discoverModule.controller('discoverCtrl', [ '$scope', 'discoverV', function($scope, discoverV) { 
    $scope.elm = []; 

    discoverV.list(function(data) { 
    $scope.elm = data; 
    }); 
}]); 

<div class="wrapper" ng-controller="discoverCtrl as discover"> <article> <section id="block-stories" class="container" ng-repeat="element in elm"> {{element.story_id}} </section> </article> </div> 

私はそれをやろうとしてきたし、次のコードが動作しない理由を私は理解していない:

discoverModule.controller('discoverCtrl', [ 'discoverV', function(discoverV) { 
    var elm = this; 
    elm.videos = []; 

    discoverV.list(function(data) { 
    elm.videos = data; 
    }); 

}]); 

<div class="wrapper" ng-controller="discoverCtrl as discover"> 
    <article> 
    <section id="block-stories" class="container" ng-repeat="element in discover.videos"> 
     {{element.story_id}} 
    </section> 
    </article> 
</div> 

私が間違ってやっていますか?

アドバイスありがとうございます。

+0

何が問題なのですか?現在のところ、私は問題の可能性がある 'discoverVideos'サービスをあなたに注入することはありません。 –

+0

新しいHTML @MatthewGreenで古いコードを使用していたので私の答えが更新されました – DevStarlight

答えて

3

discoverCtrl as discoverを書き終えたら、discoverを使用してコントローラの有効範囲にアクセスする必要があります。 (あなたが別のエラーを得た場合のみ)私はちょうど$httpコールを嘲笑例(link)を作成し、それが動作

<div class="wrapper" ng-controller="discoverCtrl as discover"> 
    <article> 
    <section id="block-stories" class="container" ng-repeat="element in discover.videos"> 
     {{element.story_id}} 
    </section> 
    </article> 
</div> 

だから、あなたのような何かを書いたはずです。

希望すると助かります。

+0

私はもう一度間違いを犯すことを気づいただけです!私はその固定で、コードを更新しました、ありがとう。疑問は、$ scopeではなくエイリアスで同じことをやり続けることができます。 – DevStarlight

+1

あなたはすでにそれをしました。あなたは 'var elm = this;'をコントローラスコープに書きました。 'this'はコントローラのエイリアスです。 'controller as ctrl'機能を使うと' ctrl'はコントローラ内部の 'this'と同じになります。 – MaKCbIMKo

+0

最後に私はこれを持っています、ありがとう! – DevStarlight

関連する問題