2017-08-23 19 views
1

こんにちは、私はangularjsでWebアプリケーションを開発しています。私はファイルアップロードモジュールを持っています。私は以下のhtmlコードを持っています。Angularjsファイルのアップロードがng-if内で機能しない

<div ng-if="FilepathDL == ''"> 
    <input type="file" file-model="attachmentDL" name="attachmentDL" class="form-control" /> 
    </div> 
    <div ng-if="FilepathDL != ''">      
    <a ng-href="" ng-click="openfile(FilepathDL)">{{ 'View File' | translate }}</a> 
    </div> 

ページロード時、最初にng-if文をレンダリングするように、FilepathDLに値を割り当てません。これは事件です。 $scope.attachmentID is ""フォームを提出するときにファイルをアップロードした後にng-ifを削除して直接入力した場合、ファイルを取得しています。ファイルコントロールをng-ifの内部に置くと何が起きているのか分かりますか?どんな助けもありがとう。ありがとうございました。

+1

'NG-if'は、DOM要素のdivのための新しいスコープを作成します。代わりに 'ng-show'を使用してください – Rahul

+0

ng-ifをng-showに変更してみてください – Vivz

+0

これをチェックしてくださいhttps://stackoverflow.com/a/29669339/1608841;重複している可能性があります – Rahul

答えて

1

ng-ifは、子スコープを作成します。したがって、ファイルモデルはコントローラスコープに直接接続されていません。

あなたは、次のいずれかの方法で問題を回避することができます

  1. あなたは
  2. あなたは、ドットの規則に従うことによって、これを回避することができ、構文としてのコントローラを使用することができますが、それは上のファイル・モデルを定義していますオブジェクト。
  3. 代わりng-if

の使用ng-show以上の基準の場合:https://github.com/angular/angular.js/wiki/Understanding-Scopes

+0

ありがとうございます。どちらが良いソリューションですか? –

+0

コントローラーは暗黙のうちにドットルールを処理するので、コントローラは多くの場所でコードを変更する必要があります。最も簡単な方法は、ng-showを使用する方法と、ファイルモデルをfile-model = "file1.attachmentDL"のようなオブジェクトにバインドし、コントローラで$ scope.file1 = {}を使用する方法です。 – Vivz

+0

ありがとうございます。私はsg-showを適用しました。 –

関連する問題