使用服务获取错误成功的角度获取值不是一个函数

时间:2017-05-05 11:41:16

标签: javascript angularjs

service.js

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;

   }]);

aa.js

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);
        });
  }]);

imageUrl.htm

    [{
            "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(...)。成功不是一个函数 我无法理解为什么我会收到此错误。任何人都可以看看,并协助我做错了,承诺正确传递。

5 个答案:

答案 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;
}