加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 角度服务定义:服务或工厂

发布时间:2020-12-17 09:52:35 所属栏目:安全 来源:网络整理
导读:我是一个有角度的新手,我正在构建一个应用程序,有一件事让我感到困惑的是,有几种方法可以定义服务,我从这个链接中读到更多: How to define service 那么似乎定义服务的方式没有太大的区别. 但我刚才注意到一个与众不同的区别: 看到我从这里得到的这项服务h
我是一个有角度的新手,我正在构建一个应用程序,有一件事让我感到困惑的是,有几种方法可以定义服务,我从这个链接中读到更多: How to define service
那么似乎定义服务的方式没有太大的区别.

但我刚才注意到一个与众不同的区别:

看到我从这里得到的这项服务http://jsfiddle.net/2by3X/5/

var app = angular.module('myApp',[]);
app.service('test',function($timeout,$q) {
  var self = this;
  this.getSomething = function() {
    return self.getData().then(function(data) {
      return self.compactData(data);
    });
  };
  this.getData = function() {
    var deferred = $q.defer();

      $timeout(function() {
          deferred.resolve("foo");
      },2000);
    return deferred.promise;
  };
  this.compactData = function(data) {
    var deferred = $q.defer();

    console.log(data);

    $timeout(function() {
        deferred.resolve("bar");
    },2000);
    return deferred.promise;
  };
});

如果我使用“factory”定义此服务,如下所示,一个函数不能调用该服务的其他功能.

app.factory('test',$q) {
  return {
      getSomething : function() {
    return getData().then(function(data) {
      return compactData(data);
    });
  },getData : function() {
    var deferred = $q.defer();

      $timeout(function() {
          deferred.resolve("foo");
      },2000);
    return deferred.promise;
  },compactData : function(data) {
    var deferred = $q.defer();

    console.log(data);

    $timeout(function() {
        deferred.resolve("bar");
    },};
});

我将在浏览器控制台中获取此信息:

[08:41:13.701] "Error: getData is not defined
.getSomething@http://fiddle.jshell.net/_display/:47
Ctrl1@http://fiddle.jshell.net/_display/:75
invoke@http://code.angularjs.org/1.0.0/angular-1.0.0.js:2795
instantiate@http://code.angularjs.org/1.0.0/angular-1.0.0.js:2805

有谁能解释一下?谢谢.

你有两个大问题:

>工厂返回语法不正确的对象.
> javascript变量范围是有效的

那是,
你应该返回一个像{key:value,key:value}这样的对象

值可以是函数.但是,你返回{key = value,key = value}

第一个修复:

return { 
    getSomething : function() {...},getData : function... 
}

其次,无法调用函数是正常的.看到这个jsfiddle.我嘲笑了一切.您可以调用服务返回的其中一个函数.但是,当从getSomething尝试调用getData时,您会得到“undefined”:

app.factory('testSO',function () {
return {
    getSomething: function () {
        console.log('return getsomething');
        getData();
    },getData: function () {
        console.log('return getData');
    }...

这与在工厂函数范围内声明所有内容并返回引用see in jsfiddle相同:

app.factory('testSO',function () {
    var getSomething = function () {
        console.log('return getsomething');
    };
    ...
return {
    getSomething: getSomething,...
}

现在您可以调用本地函数,如final version of the jsfiddle所示:

app.factory('testSO',function () {
    var getSomething = function () {
        console.log('return getsomething');
        getData();
    };
...

原始服务中有一些重要的东西:var self = this; .有些人使用var that = this.这是ECMA错误的解决方法.
在原始代码的情况下,它用于“将所有内容放在一个对象中”.自我中的函数(恰好是函数的属性)需要一个引用来知道要调用的函数的位置.自己动手http://jsfiddle.net/Z2MVt/7/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读