2017-03-11 11 views
0

angularjsディレクティブに囲みコントローラを取得しようとしています。私はまた、ngModelを必要とし、これは'require'を含むディレクティブコントローラを囲むディレクティブへのリンク

.directive("myFunnyDirective", function(....) { 
    return { 
     require: ["ngModel", "?^myFunnyCtrl"], 
     scope: {}, 
     ... 
    } 
} 

のように動作するはずですが、私のコントローラが見つからません。私はむしろ、 NgModelControllerを探しているときのように命名規則に違反しているので、私は ngModelと書く必要があると確信しています。だから私はそれを改名し、まだ何かが間違っている。魔法をデバッグするのが難しいので、ルールが実際には require: "?^abcXyz"が囲いを探すかどうか、またはそれがどのように機能するのかを知りたいですか?または、問題の間に隔離された範囲ですか?

+0

を参照してください - (https://docs.angularjs.org/api/ng/service/$compile#-require-)[AngularJS総合指令APIリファレンスが必要です]。 **指令の名称を使用していることが明らかになっています** ** – georgeawg

+0

@georgeawgうわー!私は、指示が必要であることは知らなかった。現在、何もありません。 – maaartinus

+1

$ compileサービスは、[** jqLit​​e Extras ** controller()メソッド](https://docs.angularjs.org/api/ng/function/angular.element#jquery-jqlite-extras)を使用して、コントローラを入手してください。 – georgeawg

答えて

2

囲む指示文(これは基本的にこの指示文のコントローラを与えます)を必要とします。

var myFunnyApp = angular.module('myFunnyApp', []); 
 

 
myFunnyApp.directive("myFunnyDirective", function() { 
 
    return { 
 
    template: '<my-funnier-directive></my-funnier-directive>', 
 
    controller: function() { 
 
     this.getJoke = function() { 
 
     return 'Knock, knock. ...' 
 
     } 
 
    } 
 
    } 
 
}); 
 

 
myFunnyApp.directive("myFunnierDirective", function() { 
 
    return { 
 
    require: '?^myFunnyDirective', 
 
    scope: {}, 
 
    template: 'Tell a joke! - {{joke}}', 
 
    link: function(scope, element, attrs, myFunnyDirectiveCtrl) { 
 
     scope.joke = myFunnyDirectiveCtrl.getJoke(); 
 
    } 
 
    } 
 
});
<html> 
 

 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js"></script> 
 
</head> 
 

 
<body> 
 
    <div ng-app="myFunnyApp"> 
 
    <my-funny-directive></my-funny-directive> 
 
    </div> 
 
</body> 
 

 
</html>

関連する問題