2

我刚刚浏览了angularjs,它看起来很棒!但我对一些小事感到困惑。一方面,我在哪里定义我想在 elsehwere 中实例化的对象,以及如何将它们放到那里?这似乎很模糊,所以这里有一个例子

我有一个 LogObject 类,我的简单应用程序中的许多对象都派生自该类。我将它们扩展为任务、笔记、事件等。然后我有 TaskController,以及一个处理存储和实例化任务的 TaskModel。现在,我了解执行此操作的角度方法是使用 TaskController,它利用 TaskService 进行存储和其他操作。但是我在哪里/我将 Task 对象声明为?一个值?我可以让 LogObject 成为一个值,并从中扩展吗?

PA.value('LogObject',function(){
  this.title;
  this.created = new Date();
  this.text;
  this.id;
});

PA.value('Task',function(LogObject){
  angular.extend(this,LogObject)
  this.due;
  this.etc;
  this.timeLeft = function(){
 //calculate time left 
}
});

编辑

工厂对我想要的大部分工作都很好,但我似乎无法正确扩展工厂 http://jsfiddle.net/22QLt/2/

4

2 回答 2

4

您想使用 Angular Factory :

http://docs.angularjs.org/guide/dev_guide.services.creating_services

var myModule = angular.module('myModule', []);
myModule.factory('serviceId', ['$http', function($http) {
  var items = [];
  return function(name) {
    var o = {name: name};
    items.push(o);
    return o;
  };
}]);
于 2013-05-26T20:28:30.433 回答
3

你的小提琴有一些问题,所以我稍微调整了一下让它工作:更新的小提琴

第一个问题是您的控制器没有连接到您的模块。

我添加了一个body标签:

<body ng-app='myapp'> ... </body>

并将控制器声明更改为

app.controller("HelloCtrl", function($scope, Log, DueLog){ /*...*/ });

第二个问题是您使用angular.extend. 它不是 Backbone 风格的扩展,它为您提供原型继承的糖。它只是从对象复制到另一个对象。所以我编辑了你的工厂来手动实现原型继承。

这是所有的JS:

//angular.js example for factory inheritance
var app = angular.module('myApp', []);

app.factory('Log', function(){
    function Log(t) {
        this.title = t;
    }
    Log.prototype = {
        setTitle: function(t){
            this.title = t; 
            return this; // Returning the instance for chaining.
        }
    };
    return Log;
});

app.factory('DueLog', ['Log',function(Log){
    function DueLog(d) {
        Log.call(this);
        this.due = d;
    }
    DueLog.prototype = new Log();

    return DueLog;
}]);

app.controller('HelloCtrl', function($scope, Log, DueLog) {
    $scope.x = new Log("a").setTitle('x');
    $scope.y = new DueLog("tomorrow").setTitle('y');
});

希望这可以帮助您了解其中一些部分是如何组合在一起的。

于 2013-05-27T06:03:21.087 回答