2012-11-06 59 views
0

我想向我的所有模塊之中一種功能,我想知道這個集成。 Angular支持某種mixin嗎?角混入整合

我想要混入注入新的特性(型號)和方法相關的模塊控制器。這些屬性和方法應該只使用其關聯的控制器的範圍。

我知道我可以使用下劃線_.extend或jQuery.extend(),但我想知道是否有一個真正的角精神要做到這一點更清潔的方式。

問候。

+0

你能否提供你正在試圖完成什麼更詳細?什麼是「排序」功能? –

+0

@Rosarch謝謝。我只想要一個mixin,一個服務對我沒有任何好處,因爲所有變量都會附加到服務上,而不是控制器(或者我認爲)。 我想完成什麼?控制器,該控制器可以繼承以下性狀: - 一個數組進行排序 - 甲變量指定字段排序 - 排序的方向(上升,下降) - 用於添加類的一些其他輔助功能等 由於許多控制器會經歷相同的行爲,我想將它們作爲一個混合。他們都需要在自己的範圍內具備這些特點,以免相互毒害。 –

回答

0

我不知道你想要做什麼,但它聽起來像是你想有一個Service,然後將其依賴注入到你的控制器和指令。

+1

你好尼克。感謝幾年後回覆:P。在學習了很多並且一次又一次地碰到這個問題之後,我發現創建相互通信的瘦組件是重用代碼並完成我所期望的那種混合功能的最佳方式。在角度1這是一個令人頭疼的問題,但版本2更直接,在Areliajs更是如此,這是我現在堅持的框架。 –

1

一年後:

您可以使用範圍繼承!你可以有一個主控制器與所有你想分享,然後你可以指定下列方式孩子控制器的功能:

HTML:

<body ng-controller="MainCtrl"> 
    <div id="wrapper" ng-controller="SectionCtrl"> 
    ... 
    </div> 
</body> 

MainCtrl:

function MainCtrl($scope) { 
    $scope.sorter = { array: [], sort: function() { } }; 
} 

SectionCtrl:

function SectionCtrl($scope) { 
    $scope.sorter.array = [1,2,3]; 
    $scope.sorter.sort(); 
} 

不需要聲明$ scope.sorter自MainCtrl已經宣佈它。角度中的作用域繼承與Javascript中的作用域繼承非常相似。

+0

注意,這會將'SectionCtrl'緊密連接到'MainCtrl',也就是說,除非它在'MainCtrl'內,否則不能使用'SectionCtrl',這使得組件不可重用,並且很難弄清楚它爲什麼不起作用當您嘗試在不同的上下文中使用SectionCtrl時 –

1

是的!這很簡單。

我可以給你一個例子,如何實現是:

(...) 

.controller('ParentCTRL', ['$scope', function($scope) { 

    $scope.base_func= function() { 
     //Do something 
    }; 
}]); 

.controller('ChildrenCTRL', ['$controller', '$scope', function($controller, $scope) { 

    $controller('ParentCTRL', {$scope: $scope}); 
    // Now you can access base_fun() from here 

}]); 

.controller('SecondChildrenCTRL', ['$controller', '$scope', function($controller, $scope) { 

    $controller('ParentCTRL', {$scope: $scope}); 
    // Now you can access base_fun() from here 

}]); 
+0

這是繼承,而不是混合?如果你想在兩個類中混合呢? –