[英]How to reuse one controller for 2 different views?
我已經定義了一個控制器,並將其應用於兩個視圖,差別很小。
角度代碼:
app.controller('MyCtrl', function($scope) {
$scope.canSave = false;
$scope.demo = {
files : [{
filename: 'aaa.html',
source: '<div>aaa</div>'
}, {
filename: 'bbb.html',
source: '<div>bbb</div>'
}]
}
$scope.newFile = function(file) {
$scope.demo.files.push(file);
}
$scope.$watch("demo.files", function(val) {
$scope.canSave = true;
}, true);
});
查看1:
<div ng-controller="MyCtrl"></div>
觀點2:
<div ng-controller="MyCtrl"></div>
示例代碼非常簡單,但我的實際項目中有很多代碼和邏輯。
視圖1和2具有幾乎相同的功能,只有一些差異,但我需要在控制器中為每個功能編寫一些代碼。
我不想為它們創建2個不同的控制器,因為它們具有大部分相同的邏輯。 我不想將邏輯移動到服務以在2個控制器之間共享它,因為邏輯並不是服務的常見邏輯。
還有其他辦法嗎?
在給定的條件下,我可能會做類似的事情
function MyCommonCtrl(type){
return function($scope, $http) {
$scope.x = 5;
if(type = 't1'){
$scope.domore = function(){
}
}
....
....
}
}
angular.module('ng').controller('Type1Ctrl', ['$scope', '$http', MyCommonCtrl('t1')]);
angular.module('ng').controller('Type2Ctrl', ['$scope', '$http', MyCommonCtrl('t2')]);
然后
<div ng-controller="Type1Ctrl"></div>
和
<div ng-controller="Type2Ctrl"></div>
我不知道你的具體設置,但你的2個控制器可以繼承共同的祖先。
Type1Ctrl.prototype = new MyCtrl();
Type1Ctrl.prototype.constructor = Type1Ctrl;
function Type1Ctrl() {
// constructor stuff goes here
}
Type1Ctrl.prototype.setScope = function() {
// setScope
};
Type2Ctrl.prototype = new MyCtrl();
Type2Ctrl.prototype.constructor = Type2Ctrl;
function Type2Ctrl() {
// constructor stuff goes here
}
Type2Ctrl.prototype.setScope = function() {
// setScope
};
我也面臨類似的問題和范圍繼承解決了我的問題。 我想“重用”一個控制器來繼承公共狀態/模型($ scope)和功能(附加到$ scope的控制器函數)如“范圍繼承示例”中所述,我將父控制器附加到外部DOM元素和子控制器內心的。 父控制器的范圍和功能無縫地“合並”到子控制器中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.