2015-04-24 4 views
0

Я хочу получить JSON с некоторых веб-сайт, а затем отображать его на своем сайте, используя эту строку кодаУгловое - Не удается прочитать свойство «получить» неопределенной

<div class="item" ng-style="{'margin': mb.itemMargin()}" ng-repeat="item in mb.getItems()"> {{mb.calculateItemMargin()}} </div> 

В ма .js файл Я использую это код

mb.getItems = function($http){ 
    return $http.get("http://SOME_URL") 
    .success(function(response) { 
     return response.dirs; 
    }); 
    }; 

Но в консоли он показывает эту ошибку:

TypeError: Cannot read property 'get' of undefined

at mb.getItems (angular.js:56) 
at ib.functionCall (angular.js:12404) 
at Object.<anonymous> (angular.js:12910) 
at n.$get.n.$digest (angular.js:14300) 
at n.$get.n.$apply (angular.js:14571) 
at angular.js:1455 
at Object.e [as invoke] (angular.js:4203) 
at d (angular.js:1453) 
at uc (angular.js:1473) 
at Jd (angular.js:1367) 

Мой angular.js файл

var app = angular.module('mediaBrowserApp', []); 
app.controller('mediaBrowser', function($http){ 
    var mb = this; 


    mb.showMainPage = function(){ 
    if(mb.currentDir.length>0){ 
     return false; 
    } 
    else{ 
     return true; 
    } 
    }; 
    var dirToRedir = ''; 
    mb.dirContent = function(dir){ 
    mb.currentDir = dir; 
    }; 

    mb.nextDir = function(){ 
    return dirToRedir; 
    }; 

    mb.calculateItemMargin = function(){ 
    var minWidth = 145; 
    var minMargin = 17; 
    var minElementWidth = minWidth + minMargin; 

    var numOfItemsFitInContainer = 0; 
    var widthOfParent = document.getElementById('mb-container').clientWidth; 

    for(i=widthOfParent; i>minElementWidth; i = i-minElementWidth){ 
     numOfItemsFitInContainer++; 
    } 

    var spaceLeft = widthOfParent - (minElementWidth * numOfItemsFitInContainer); 
    if(spaceLeft>numOfItemsFitInContainer){ 
     var newItemMargin = minMargin + (spaceLeft/numOfItemsFitInContainer); 
    } 
    else{ 
     var newItemMargin = minMargin; 
    } 

    newItemMargin = newItemMargin/2; 

    return Math.floor(newItemMargin); 
    }; 

    mb.itemMargin = function(){ 
    var width = mb.calculateItemMargin() + "px"; 
    return width; 
    }; 

    mb.getItems = function($http){ 
    return $http.get("http://SOME_URL") 
    .success(function(response) { 
     return response.dirs; 
    }); 
    }; 

}); 
+1

Вы можете разместить полный файл 'ma.js'? Я подозреваю, что вы не вводите '$ http' –

+1

Вам нужно ввести' $ https' в ваш контроллер, а не функцию. –

+0

'$ http' следует вводить контроллеру! –

ответ

4

Вам не нужно вводить услуг и поставщиков для самих функций, а к контроллеру:

function($http) { // Lose this ! 
    .... 
} 

и поместите $http инъекции в декларации контроллера вместо.

+0

Кажется, работает, но теперь у меня много ошибок, похоже, что это в каком-то цикле или что-то в этом роде, потому что на консоли имеется около 100 ошибок каждую секунду – Stevik

+0

Один за другим ... :) Вставьте один, может быть, мы сможем увидеть, что это такое. –

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