angular.module('users.background.image', [])
.factory('changebgimage', ['$http', '$q', '$rootScope', function($http, $q, $rootScope){
'use strict';
var service = {
changeRandomImage : changeRandomImage
};
function changeRandomImage(){
/*var random = $scope.data[Math.floor(Math.random() * $scope.data.length)];
$scope.imageSource = random;*/
var url = 'webService/imageUrl.htm';
var deferred = $q.defer();
$http.get(url)
.success(function(data){
deferred.resolve(data.data);
})
.error(function(error){
deferred.reject(error.message);
});
return deferred.promise;
}
return service;
}]);
angular.module('users.da', ['users.background.image'])
.controller('da', ['user', '$scope', 'changebgimage', function (user, $scope, changebgimage) {
'use strict';
changebgimage.changeRandomImage()
.success(function (data) {
console.log(data);
}).error(function(error){
console.log(error);
});
}]);
[{
"id": 1,
"path": "images/bg/1.jpg"
},
{
"id": 2,
"path": "images/bg/2.jpg"
},
{
"id": 3,
"path": "images/bg/3.jpg"
},
{
"id": 4,
"path": "images/bg/4.jpg"
},
{
"id": 5,
"path": "images/bg/5.jpg"
},
{
"id": 6,
"path": "images/bg/6.jpg"
}]
我试图从角度获取服务的值,但得到错误changebgimage.changeRandomImage(...)。成功不是一个函数 我无法理解为什么我会收到此错误。任何人都可以看看,并协助我做错了,承诺正确传递。
答案 0 :(得分:1)
$ http服务是一个函数,它接受一个参数 - 一个配置对象 - 用于生成HTTP请求并返回一个promise。关注$http Service Documentation
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#534783"
tools:context="com.maks.testscreenshots.MainActivity">
<TextureView
android:id="@+id/textureView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/holo_red_dark"/>
<!--<SurfaceView-->
<!--android:id="@+id/surface"-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_gravity="center" />-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button"
android:text="Button"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="8dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginLeft="8dp"
app:layout_constraintLeft_toLeftOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:background="@color/colorAccent"
android:textSize="100sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:id="@+id/textView" />
</android.support.constraint.ConstraintLayout>
答案 1 :(得分:1)
承诺对象没有success()
或error()
方法,它有then()
和catch()
(以及finally()
)方法
答案 2 :(得分:0)
.success()
方法,请使用.then()
。
像:
$http.get(url).then(function (data) {
// handle response data
}, function (error) {
// handle error from api
}).catch(function (err) {
// handle error from response.
});
答案 3 :(得分:0)
看起来他们在新版本中删除了该功能。 尝试使用#34;然后&#34;
使用promises$http.get(url).then(function(response) {
// data is under response.data
});
有一篇文章: http://www.codelord.net/2015/05/25/dont-use-%24https-success/
答案 4 :(得分:-1)
删除了deferred.resolve(data.data); 因为data.data没有值数据具有值
function changeRandomImage(){
var url = 'webService/imageUrl.htm';
var deferred = $q.defer();
$http.get(url)
.success(function(data){
deferred.resolve(data);
})
.error(function(error){
deferred.reject(error.message);
});
return deferred.promise;
}