首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度模型设计

角度模型设计
EN

Stack Overflow用户
提问于 2014-06-30 12:41:46
回答 2查看 69关注 0票数 0

我有一个非常困难的时刻,选择一个明确的方式来创建模型的角度。几个星期以来,我一直在做这样的事情:

代码语言:javascript
复制
documentModule.factory('Document',function(){

    function MyModel(){
        this.prop = ''
    }

    MyModel.prototype.foobar = function(){
        // Some logic to perform on model data
    };

    return{
        getInstance: function(){
            return new MyModel();
        }
    }

});

我将所有处理模型数据的方法添加到原型中。

最近,我有幸阅读了一本关于“人类JavaScript”的免费电子书,你可能已经偶然发现了:http://read.humanjavascript.com

在第七章“模型”中,他们介绍了一种将模型提供给强加给我的应用程序的方法。我喜欢这样的想法:“能够打开模型的代码,读取它存储的属性以及这些属性的类型”。

然而,我自己并不是一个太聪明的人,也不能想出一个解决方案来使用这个角度。另外,你是如何与模特合作的?

,你对这个概念有什么想法,你会推荐用角度来实现类似的东西吗?如果是的话,你会怎么开始呢?

EN

回答 2

Stack Overflow用户

发布于 2014-06-30 13:40:46

我认为使用原型继承是个好主意,它为某些逻辑提供了一个适当的位置,从而有助于保持控制器的精确性。

我建议简化你的例子:

代码语言:javascript
复制
documentModule.factory('MyModel',function(){

  function MyModel(){
      this.prop = ''
  }

  MyModel.prototype.foobar = function(){
      // Some logic to perform on model data
  };

  return MyModel;
});

如下所示的使用MyModel:

代码语言:javascript
复制
documentModule.factory('MyModelController',function($scope, MyModel){
  $scope.myModel = new MyModel();
});

如果您想对模型提供基本的REST支持,请看一下$resource https://docs.angularjs.org/api/ngResource/service/$resource。

票数 1
EN

Stack Overflow用户

发布于 2014-06-30 15:50:47

有一个不同的-- Human JavaScripts中的模型不是构造函数,- you不能在实例化进程上传递参数。

要提供默认值,只需修改工厂内的defaults对象

代码语言:javascript
复制
angular.module('app', [])
    .factory('model', function () {function model(args) {
        var defaults = {
            foo: 'default value',
            bar: 'default value',
            quux: 'other value'
        };

        this.options = angular.extend(defaults, args);
    }

    model.prototype.getAccessToOptions = function () {
        return this.options;
    };

    return model;
})
    .controller('model', function ($scope, model) {
    var model = new model({
        foo: 'foo',
        bar: 'bar'
    });

    console.log('model.getAccessToOptions()', model.getAccessToOptions());
    // model.getAccessToOptions() Object {foo: "foo", bar: "bar", quux: "other value"} 
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24490411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档