我只是通过angularjs看了一下,它看起来很棒!但我对一些小事感到困惑。首先,我在哪里定义我想要实例化的对象,以及如何在那里获取它们?这看起来很模糊,所以这是一个例子
我有一个LogObject类,我的简单应用程序中的许多对象都来自这个类。我将它们扩展为Tasks,Notes,Events等。然后我有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/
答案 0 :(得分: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;
};
}]);
答案 1 :(得分:3)
您的fiddle存在一些问题,因此我稍微调整了一下以使其正常运行:updated fiddle
第一个问题是您的控制器未连接到您的模块。
我添加了一个正文标记:
<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');
});
希望这有助于您了解其中一些部分是如何组合在一起的。