2015-10-07 46 views
1

您好我被困在定製服務中AngularJS提取數據我準備了一個代碼片段作爲波紋管從AngularJS服務

爲HTML:

<div ng-controller="ctrlC"> 
<ul ng-repeat="x in cors"> 
    <li>{{x.Name}}</li> 
</ul> 
</div> 

爲AngularJS服務

var app = angular.module('myApp', []); 
app.service('myfuncA', function($http){ 

    $http.get('lib/data.txt').success(function(datax){ 


     this.dataM = datax; 

    }).error(function(){ 

var den = console.log("No Data"); 
this.case = den; 
    }); 


}); 

的控制器

app.controller('ctrlC', function($scope, myfuncA){ 

    $scope.cors = myfuncA.datax; 


}); 

數據沒有拉起來,沒有錯誤。

+0

嘗試在http.get()中使用完整路徑 –

+0

您將收到CORS錯誤 –

+0

XMLHttpRequest無法加載http://127.0.0.1:85/lib/data.txt。請求的資源上沒有「Access-Control-Allow-Origin」標題。原因'http:// localhost:85'因此不被允許訪問。 –

回答

0

$ http.get方法返回HttpPromise(https://docs.angularjs.org/api/ng/service/ $ http#get)。 這裏是例子用法:https://docs.angularjs.org/api/ng/service/ $ HTTP

嘗試使用:

$http.get('lib/data.txt').then(function(datax){ 
    this.dataM = datax; 
}, function(){ 
    var den = console.log("No Data"); 
    this.case = den; 
}); 
+0

看到數據正在旅行,但情況之一是什麼我共享和我粘貼,但它不是在視圖中顯示 –

+0

您需要將Promise返回給控制器,然後在控制器上設置$ scope變量然後回覆Promise返回 - 如果我得到時間會發布一些代碼。 – markyph

0

東西沿着這些路線。沒有測試,但會給你一個想法。你也應該使用$ log服務,也不知道你爲什麼要將它設置爲一個變量。此外,數據如何存儲在txt文件中?我假設JSON。但希望這會讓你走上正軌。

var app = angular.module('myApp', []); 
app.service('myfuncA', function($http){ 
    return $http.get('lib/data.txt').then(function(datax){ 
     return datax; 
    }); 
}) 

控制器:

app.controller('ctrlC', function($scope,$log myfuncA){ 
    myfuncA.then(function(datax){ 
      $scope.cors = datax; 
      },function() {$log.log("No Data");}; 
    }); 
}); 
0

在不同的音符爲$ HTTP調用,我寧願使用一個工廠,並注入該工廠在控制器中設置$ scope.cors。事情是這樣的:

app.factory('myfuncA', function($http){ 
    return { 
     getData: function() { 

      return $http.get('lib/data.txt'); 
      }; 
    } 
}); 

和Controller我將消耗工廠:

app.controller('ctrlC', function($scope, myfuncA){ 
    myfuncA.getData().then(function(response) { 
     $scope.cors = response.data; 
    }); 
}); 
1
  1. 服務必須返回的東西
  2. datax是一個內部變量,而不是提供給上下文外到服務。

    嘗試返回$http.get的承諾或更好的承諾的結果。

    app.service('myfuncA', function($http){ 
        var service = { 
         run: run 
        }; 
    
        function run(){ 
        var ret; 
        $http.get('lib/data.txt') 
         .success(function(datax){ 
          ret = datax;}) 
         .error(function(){ 
          console.log("No Data");}); 
        return ret; 
        } 
    

    });

0

我覺得有問題,this不是指您的服務對象。

「儘管看起來這是指它定義的對象,但直到一個對象調用這個Function時,它纔會被賦值,並且它被賦值的值完全基於對象它調用了這個函數,在大多數情況下它具有調用對象的值,但是有一些情況下它沒有調用對象的值,我稍後會介紹這些方案。「

」 this關鍵字是最被人誤解時,我們借使用此的方法,當我們分配使用這一個變量,當使用這個作爲一個回調函數傳遞的函數,當一個方法這是用來封閉」內

如果我是你,我會用其他類型的語法,如:

angular.module('myApp').factory('myfuncA', dataService); 

/* @ngInject */ 
function dataService($http) { 
    var service = { 
     getData: getData 
    }; 

    return service; 

    function getData() { 
     return $http.get('lib/data.txt');//$http.get method returns HttpPromise 
    } 
} 

然後使用它:

myfuncA.getData().then(function (result) { 
    //your code 
}