微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – 如何创建一个可以在Angular中使用的自定义对象类

我是一个有角度的巨大粉丝,但它有一些棘手的概念,他们之间有非常微妙的差异,这是其中之一.

我只想创建一个我可以用来在我的角度控制器和工厂中创建自定义对象的类.它肯定不应该那么难,但我不知道如何做到这一点.我想要一个自定义的ResultSet类,我可以实例化来创建ResultSet的实例.但是对于我的生活,我无法弄清楚使用工厂v服务的正确语法.

这就是我想要的:

ResultSet = function(dataSet){ 
  this.filter = function(){ 
    # filters and returns dataSet
    # ...
  }
}

然后我想要在控制器等中实例化一个ResultSet的实例:

MyApp.controller('pageCtrl',['ResultSet',(ResultSet) ->
  # ...
  rs = ResultSet.new(dataToFilter)

如何创建一个允许我创建自定义对象的实例的服务?

使用角度服务而不是工厂似乎更正确,因为服务返回对象的实例(正是我想要的).但我不知道如何做到这一点…

我如何使用服务声明自定义ResultSet类,然后如何从其中实例化一个实例?

myApp.factory('ResulSet',function() {
    function ResultSetInstance(dataSet) { 
        this.filter = function(){ 
            // ...
        }
    }

    return {
        createNew: function(dataSet) {
            return new ResultSetInstance(dataSet);
        }
    };
});

接着

myApp.controller('pageCtrl',function(ResultSet) {
    var someData = ...;
    var rs = ResultSet.createNew(someData);
}

编辑(来自问题提问者)

在进一步尝试的时候,我发现你甚至不需要使用createNew方法.

myApp.factory('ResultSetClass',function() {
    ResultSetClass = function(dataSet) { 
        this.filter = function(){ 
            // ...
        }
    }

    return ResultSetClass
});

工作很好,然后你可以调用新的ResultSetClass(args).

注意使用Coffeescript的人

Coffeescript将返回您的类实例中的最后一个变量或方法,因此如果使用coffeescript(作为一般规则),则必须在类定义的末尾返回此变量或方法

myApp.factory 'ResultSetClass',() ->
  ResultSetClass = (dataset) ->
    this.filter = () ->
      # do some stuff
    return this

  return ResultSetClass

如果你不明确地返回,那么你会发现你打电话时

myApp.factory 'ResultSetClass',() ->
  ResultSetClass = (dataset) ->
    this.filter = () ->
      # do some stuff

那么你将只剩下coffeescript返回的最后一个过滤方法.

原文地址:https://www.jb51.cc/angularjs/140599.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐