HTML部分
<index></index>
指令
angular.module('todoWithAngularApp').directive('index', function () {
return {
restrict: 'E',
templateUrl: '/scripts/template/index.html',
replace: true,
link: function (scope, iElement, iAttrs) {
console.log(scope);
console.log(iElement);
console.log(iAttrs);
iElement.on('click', '#addTaskClass', function(event) {
scope.addTaskClassBoxDisplay = true;
console.log(scope.addTaskClassBoxDisplay);
})
}
};
控制器
angular.module('todoWithAngularApp').controller('IndexCtrl', function ($scope) {
$scope.addTaskClassBoxDisplay = false;
});
怎样才能让指令去修改控制器上的$scope的属性
無責任かつ未検証ですが、いくつかのアイデアを紹介します:
1. addTaskClassBoxDisplay をオブジェクトの下に配置します (例:
) scope.obj.addTaskClassBoxDisplay = true
2. メッセージを使用する
3.サービスを利用する
上記の 3 つの方法は、Angular のモジュール間でデータを共有する一般的な方法でもあり、さまざまなシナリオに適応できます。
http://stackoverflow.com/questions/14115701/angularjs-create-a-directi...
リーリー
まず独立したスコープを開き、「=」を使用してスコープのオブジェクトに対して双方向バインディングを実行します。以下の例のように、コマンドのobjがバインドされてaddTaskClassBoxDisplayオブジェクトに送信されます
リーリーこの質問をする前に、質問を修正させてください。
コントローラーの $scope を変更したいとします。まず、自分で定義した命令はコントローラー内のスコープです。別のスコープを継承したり作成したりしません。したがって、命令のスコープ内の属性を変更すると、この命令を参照するコントローラーのスコープの対応する属性も確実に変更されることになります。
コントローラを作成したときに、なぜコントローラのスコープを変更しなかったのかと疑問に思われるかもしれません。
理由は
を使用したからです iElement.on('click', '#addTaskClass', function(event) {
scope.addTaskClassBoxDisplay = true;
自分で定義したクリック リスナーは、scope 属性の変更をトリガーしますが、Angular にダーティ チェックを実行するように通知することはありません。つまり、addTaskClassBoxDisplay を変更すると、ページ上で応答しなくなります。
このエラーを修正する方法。 $apply() を追加するだけです。ダーティ チェックを手動でトリガーします。使用方法は自分で百度に問い合わせてください。
さて、あなたの質問に戻りましょう。ディレクティブでコントローラーのスコープを変更する方法。
1. ディレクティブの内部属性から始めましょう。
ディレクティブのscope属性とその3つのメソッドは、コントローラーのスコープを変更できます。
1.スコープが定義されていないか、スコープ: false。コントローラーのスコープを直接使用します
2. スコープ: true。コントローラーを継承するスコープです。現時点では、変更するコンテンツはオブジェクトとして定義するのが最適です。
3. スコープ: {key:'=key'}。独立したスコープです。変更方法は上記と同じですが、オブジェクトとして定義するのがベストです
それから別の人に言います。 iAttrs を使用して、ディレクティブの属性として定義します。
var model = $parse(iAttrs.addTaskClassBoxDisplay);
iElement.on('click', '#addTaskClass', function(event) {
model.assign(scope,true);
スコープ.$apply();
2. ラジオを使用します。具体的には百度。
3. サービスを利用して配達します。
4. この命令は $rootScope を呼び出し、コントローラーのスコープ属性を $rootScope 属性と等しくします。 (これはやめてください)
もう仕事に行く時間なので、後で Baidu を使用できます。
http://www.hubwiz.com/course/54f3ba65e564e50cfccbad4b/
基本: http://www.hubwiz.com/course/547c3e3b88dba0087c55b4e5/
とても良い質問です、私も聞きたいです