我試圖在角度服務中使用繼承,如下所述: http://blog.mgechev.com/2013/12/18/inheritance-services-controllers-in-angularjs/,我想使用「注入父項」方法。使用Object.create的角度服務繼承()
但是,它似乎沒有工作,我不明白爲什麼。
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'。 – micmia