コントローラとディレクティブ間の機能の可視性について質問があります。コントローラーとディレクティブがあります。ディレクティブは次のようになります
(function() {
'use strict';
angular
.module('myproject.schedule')
.directive('dirname', dirname);
function dirname() {
var directive = {
restrict: 'A',
replace: true,
scope: {
currentDateScheduler: "=",
...
},
controller: DirnameController,
controllerAs: 'vm',
bindToController: true,
templateUrl: ... directive.html
私のコントローラーは次のようになります。
(function() {
'use strict';
angular
.module('myproject.schedule')
.controller('MyController', MyController);
...
directive.htmlファイルには、コントローラーの機能を呼び出すng-clickがあります。これは正常に機能します。
実は今、なぜかわかりませんか?ディレクティブには独自の名前空間があり、コントローラーの機能は... directive.htmlに表示されないと思いました。
どうもありがとうございました!
コントローラースコープは、コントローラーが宣言されているDOM要素内で子として表示されるすべてのディレクティブで使用できます。例えば
<div ng-controller="ctrl1">
<dirname></dirnam> <!-- this has access to ctrl1 scope -->
</div>
したがって、別のコントローラー内でディレクティブを使用する場合、そのコントローラースコープにアクセスできます。これは、ディレクティブが宣言したコントローラーに関数が存在しない場合、ng-clickは何もしないことを意味します。
ディレクティブでは、コントローラーを宣言できます。このコントローラーで宣言されたものはすべて、ディレクティブ内の同じ名前のコントローラー関数をオーバーライドします。例えば
angular.module('myApp',[])
.controller('myController',function($scope){
$scope.clickMe = function(){
alert('clicked from the controller');
}
})
.directive('dirname', function(){
return {
controller: function($scope){
$scope.clickMe = function(){ alert('clicked from directive'); };
},
};
});
コントローラはネストすることもできます。この場合も、スコープにはトップダウン効果があり、最上位のコントローラーで定義された関数を、子コントローラーで囲まれたdom要素で使用できます。また、この子コントローラーに同じ関数が宣言されている場合、これらは親コントローラーの機能をオーバーライドします。
お役に立てれば
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加