调用$ scope函数的自定义指令导致$ rootScope:infdig

时间:2016-01-11 04:18:20

标签: javascript angularjs json http backand

我试过在这里查看其他$ rootScope:infdig问题,找不到真正向我解释的问题,或者我理解的问题。与AngularJs文档相同。我希望有人可以提供帮助。

我在$ scope上创建了一个函数,该函数接受一个参数并调用api GET请求并返回一个带有just和“id”和“name”的json对象。然后,此函数将对象的名称返回给调用它的指令。

该函数从指令调用,但一旦它执行,它就会陷入每秒一百个“rootScope:infdig”的错误中。该指令也从不呈现返回的“名称”的文本。我知道http调用有效,因为我在控制台中记录了“名称”。

Error Screen

这是我的控制器:

owlyfm.controller('landingPageController', [ "$scope", "$log", "$http", "$location", "apiUrlsService", function ($scope, $log, $http, $location, apiUrlsService) {

 $http.get("https://api.backand.com:443/1/objects/Albums?pageSize=3&pageNumber=1&deep=true&relatedObjects=true")
    .success( function(result){
        $scope.featuredAlbums = result.data;
        //$log.info($scope.featuredAlbums);
    })
    .error( function(data, status){
        $log.error(data);
    });

    $scope.getAlbumArtist = function(artistId){

      $http.get("https://api.backand.com:443/1/objects/Artists/" + artistId)
        .success(function(result){
          var artistsName = result.name;
          $log.info(artistsName);
          return artistsName;
        });
    }
}]);

这是我创建指令的地方:

owlyfm.directive("featuredAlbum", function(){

return{
    restrict: 'E',
    templateUrl: 'directives/featuredAlbum.html',
    scope: {
        albumObject: "=",
        getAlbumArtistFunction: "&"
    }
  }
});

这是我在视图中调用指令的地方

<div class="row fluid-container" >
    <featured-album ng-repeat="featuredAlbum in featuredAlbums" album-object="featuredAlbum" get-album-artist-function="getAlbumArtist(album)" class="col-md-4" ></featured-album>
</div>

这是指令本身:

    <div class="featuedAlbum">

        <div>
            <img class="img-responsive" ng-src=" {{albumObject.albumArtUrl}} "/>
        </div>

        <h4>{{ albumObject.name }}</h4>
        <h5>{{ getAlbumArtistFunction( { album: albumObject.Artists } ) }}</h5>
        <h6>{{ albumObject.releaseDate }}</h6>

    </div>

我在做什么

总结一下,我正在做的是调用api来获取一个专辑对象,(我正在使用“Backand”BTW)一旦我得到这个专辑对象,我就会渲染<img><h>标签包含我收到的数据。这很好。

专辑对象有ID,ID,Date,imgUrl和“Artists”(这只是艺术家的id)。然后我使用这个“艺术家”id进行另一次调用以获取与之关联的实际Artist对象。这就是出现问题的地方。

问题

是艺术家对象的http调用导致错误循环。即使我可以在日志中看到它正在获取艺术家的json对象,但它不会将其发送到指令。

我研究的内容

我已经读过使用ng-repeat和指令中的函数存在问题。但是,我并不完全理解为什么以及它如何应用于此,我也不知道如何改变它来做我想要实现的目标。这里的所有其他问题都在我的头上。

如果有人能帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:1)

正如评论中所说,调用一个从服务器内部获取数据的函数不是一个好主意, 因为它需要多次调用,当你需要它只被调用一次时。

您可以添加&#34; artistName&#34;的属性这将被设置在&#34; featuredAlbum&#34;构造

owlyfm.controller('featuredAlbumController', [ "$scope","$http",function ($scope, $http) { $http.get("https://api.backand.com:443/1/objects/Artists/" + $scope.artistId) .success(function(result){ $scope.artistName = result.name; }); }]);

因此,在控制器第一次运行时,$ http只会被调用一次。