【发布时间】:2016-05-14 08:50:48
【问题描述】:
我正在尝试在角度服务中使用继承,如下所述: http://blog.mgechev.com/2013/12/18/inheritance-services-controllers-in-angularjs/,我想使用“注入父级”的方法。
但是,它似乎不起作用,我不明白为什么。
var myApp = angular.module('myApp',[]);
angular.module('myApp').controller('MyCtrl', MyCtrl);
angular.module('myApp').factory('BaseModel', BaseModel);
angular.module('myApp').factory('ThreadModel', ThreadModel);
angular.module('myApp').factory('PostModel', PostModel);
function MyCtrl($scope, ThreadModel, PostModel) {
$scope.tableNameForThreads = ThreadModel.getTableName();
$scope.tableNameForPosts = PostModel.getTableName();
}
function BaseModel() {
var tableName = "";
var service = {
init: init,
getTableName: getTableName
};
return service;
function getTableName() {
return tableName;
}
function init(theTableName) {
tableName = theTableName;
}
}
function ThreadModel(BaseModel) {
var service = Object.create(BaseModel);
service.init("threads");
return service;
}
function PostModel(BaseModel) {
var service = Object.create(BaseModel);
service.init("posts");
return service;
}
结果是 ThreadModel.getTableName() 返回“posts”而不是“threads”。
Object.create(...) 和 angular.copy(BaseModel, this) 我都试过了,但似乎都没有做深拷贝。
JSFIDDLE:http://jsfiddle.net/dirkpostma/Lvc0u55v/3989/
我在这里做错了什么?
【问题讨论】:
-
尝试将控制器放在工厂之后,在初始化时放在顶部
-
这是因为
init()总是在BaseModel的原型中改变tableName。
标签: javascript angularjs oop inheritance factory