您好我在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;
});
});
for controller
app.controller('ctrlC', function($scope, myfuncA){
$scope.cors = myfuncA.datax;
});
数据没有拉起来,没有错误。
答案 0 :(得分:1)
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;
}
});
答案 1 :(得分: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;
});
答案 2 :(得分:0)
这些方面的东西。没有经过测试,但会给你一个想法。此外,您应该使用$ log服务,也不确定为什么要将其设置为变量。如何将数据存储在txt文件中?我假设JSON。但希望这会让你走上正轨。
app.controller('ctrlC', function($scope,$log myfuncA){
myfuncA.then(function(datax){
$scope.cors = datax;
},function() {$log.log("No Data");};
});
});
控制器:
namedParameters
答案 3 :(得分:0)
对于$ http调用的另一个注释,我宁愿使用工厂并在控制器中注入该工厂来设置$ scope.cors。像这样:
app.factory('myfuncA', function($http){
return {
getData: function() {
return $http.get('lib/data.txt');
};
}
});
在控制器中我会消耗工厂:
app.controller('ctrlC', function($scope, myfuncA){
myfuncA.getData().then(function(response) {
$scope.cors = response.data;
});
});
答案 4 :(得分:0)
我认为问题在于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
}