2016-09-15 124 views
2

我有一个弹出窗口,您可以在其中添加内容到数据库。但是,当您在名称字段点击我在控制台中的错误,他说:对话框没有关闭

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

如果仍然输入文本/在框中,然后按编号保存,在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