1

ディレクティブを相互に通信させる方法があることは知っています。コントローラーを使用してそれを行うことができます。私の問題は、アップロード アプリを作成しているページに 2 つのディレクティブがあることです。ファイル入力を使用してファイルを選択したかどうかを検出するファイル変更ディレクティブと、ドラッグ アンド ドロップ用のドロップゾーンを作成するディレクティブを使用しています。ファイルは両方とも機能しています。

しかし、dropzone または filechange ディレクティブがページで使用されているかどうかをアプリに検出させるにはどうすればよいですか? ファクトリ メソッドを作成し、配列を持つデータ サービスを使用してディレクティブの名前を配列にプッシュしています。しかし、両方がページにあるにもかかわらず、1つだけが登録されている場合はどうなりますか? どうすればこれを修正できますか? それは非同期の問題ですか?

ここに私のuploader3.jsがあります

var app = angular.module("uploader", []);
app.factory('data', function(){

return {

    directives:[],
    progressBarSet:false,
    getData:function(){

        return this;

    }

   }

});


app.directive("dropzone", ["data", function (data) {

return {

    restrict: "A",
    controller: function($scope){

    },
    priority: 0,
    link: function (scope, element, attr, ctrl) {

         data.directives.push("dropzone");            
         console.log(data.directives);
    }

  }

}]);




app.directive("filechange", ["data", function (data) {

return {

    restrict: "A",
    controller: function($scope){

    },
    priority: 1,
    link: function (scope, element, attr, ctrl) {

         data.directives.push("filechange");            
         console.log(data.directives);
    }

  }

}]);

ここに私のhtmlがあります。

<!doctype html>
<html ng-app="uploader">
<script src="Scripts/angular.min.js"></script>
<script src="app/uploader3.js"></script>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body dropzone>
    <input type="file" name="FILEDATA" id="FILEDATA" accept="image/jpg, image/jpeg" filechange>
</body>
</html>

data.directives をログに記録すると、長さが 1 であることがわかりますか? プッシュを適用して両方のディレクティブをデータ サービスに登録するにはどうすればよいですか?

ページに実際に適用されているディレクティブを把握するためのより良い方法はありますか? dropzone または file change ディレクティブがページに実装されているかどうか、または両方が使用されているかどうかに基づいて、次のコード セットを実行する必要があります。

4

3 に答える 3

0

進行状況バーが必要であることを確認した場合、1 つのオプションは、オプションで ( ?^)dropzonefilechange.

このルートに進む場合、この状況での通信について説明するものがあります:親ディレクティブ コントローラーを必要とする AngularJS ディレクティブ コントローラー?

複数の要件がある場合: https://groups.google.com/forum/#!msg/angular/PZLxEKZUy5k/M1_JKF84-MEJ

これにより、アーキテクチャ内で理にかなっている場合、責任を適切に分離できます。

まだお持ちでない場合は、質問を解決しないこの実装をチェックアウトすることもできますが、progressBar ディレクティブ内で役立つ可能性があります

于 2013-10-15T16:41:40.400 に答える