2016-09-15 10 views
2

データベースに何かを追加できるポップアップウィンドウがあります。ダイアログが閉じない

VM247 1:1 Uncaught TypeError: Cannot set property 'result' of undefined 

をあなたはまだボックス内のテキスト/数字を入力し、Enterキーを押し保存した場合、popupwindowはちょうどロード:あなたが名前フィールドでクリックしたときしかし、私が言って、コンソールでエラーが発生します。ただし、ビューを更新すると、エンティティはデータベースに保存されます。

誰でもこの原因を知っていますか?ここで

はhtmlです:

<div class="row"> 
    <md-input-container class="md-block" flex-gt-xs> 
     <label>Name</label> 
     <input ng-model="csc.user.newEntry.Name" onfocus="csc.saveData.result = ''" /> 
     <div ng-messages="csc.user.newEntry.Name.$error" ng-show="csc.saveData.result < 0"> 
      <div>Duplicate Name</div> 
     </div> 
    </md-input-container> 
</div> 

角度:

saveEntry: function() { 
vm.savingActivated = true; 
vm.saveData = EntriesResource.save(vm.user.newEntry, 
    () => { 
     vm.savingActivated = false; 
     console.log(vm.saveData.result); 
     if (vm.saveData.result > 0) { 
      $rootScope.$broadcast("EntriesUpdated"); 
      $mdDialog.hide(); 
     } 

答えて

0

あなたはあなたの中のテンプレートのロジックをオブジェクトのプロパティを使用しているので、オブジェクト自体が参照する時に存在している必要がありますそのメンバーに。 入力にフォーカスすると、onfocusを使用して作成しています。 前に初期化するか、ngShowの式を変更して、プロパティの代わりにオブジェクト自体を使用するようにしてください。

saveEntry: function() { 
     vm.savingActivated = true; 

     // intializeing 
     vm.saveData = {}; 

     vm.saveData = EntriesResource.save(vm.user.newEntry, 
      () => { 
       vm.savingActivated = false; 
       console.log(vm.saveData.result); 
       if (vm.saveData.result > 0) { 
        $rootScope.$broadcast("EntriesUpdated"); 
        $mdDialog.hide(); 
       } 
+0

回答ありがとうございますが、動作しませんでした。私はsaveDataの前にそれを初期化しようとしましたが、私はまだ "未定義のプロパティ '結果'を設定できません"というエラーが発生します。 – wavejumper

+0

問題が生き生きとしているのは、まだ定義されていない間に、プロパティ 'result'を' csc.saveData'に設定しようとしていることです。しかし、どのラインがこのエラーを正確にスローしているのかわからないので、その前にオブジェクトを初期化するために必要なラインがどれか分からない。もちろん、私は私の答えに固定した間違いがありました – Reyraa

+0

ああ、最初に 'result'を設定してから' saveEntery'関数を呼び出すと、初期化はこの関数の外になければなりません – Reyraa

関連する問題