2016-11-22 70 views
1

当我尝试在角度上添加SweetAlert2到我的删除按钮时,它会阻止范围更新模型。它们可以一起使用吗?如何在使用SweetAlert2和Angular时保持范围?

Shown here in this Plunker (请务必先添加一个项目,那么您可以在该示例删除)

代码SweetAlert不工作(当我确认没有任何反应):

function fieldToolsController($scope, ParticipantFactory) { 
    var model = this; 
    model.participant = ParticipantFactory; 
    model.participant.hasRoles = model.participant.roles.length > 0; 

    model.deleteSelectedRole = function() { 
    for (var i = 0; i < model.participant.roles.length; i++) { 
     if (model.participant.roles[i] === model.participant.selected) { 

     swal({ 
      title: 'Are you sure?', 
      text: "You won't be able to revert this!", 
      type: 'warning', 
      showCancelButton: true, 
      confirmButtonColor: '#3085d6', 
      cancelButtonColor: '#d33', 
      confirmButtonText: 'Yes, delete it!' 
     }).then(function() { 

      //============================= 
      //LOSES SCOPE HERE OR SOMETHING 
      //============================= 
      model.participant.roles.splice(i, 1); 
      model.participant.hasRoles = model.participant.roles.length > 0; 
      if (model.participant.hasRoles) { 
      model.participant.selected = model.participant.roles[0]; 
      } 
      return; 
      //============================= 
      //============================= 
      //============================= 

     }); 

     } 
    } 
    }; 
} 

下面是一个正常的JavaScript警告正常工作相同的功能:

And the plunker

function fieldToolsController($scope, ParticipantFactory) { 
    var model = this; 
    model.participant = ParticipantFactory; 
    model.participant.hasRoles = model.participant.roles.length > 0; 

    model.deleteSelectedRole = function() { 
    for (var i = 0; i < model.participant.roles.length; i++) { 
     if (model.participant.roles[i] === model.participant.selected) { 

     var c = confirm("Are you sure?"); 
     if(c){ 
      model.participant.roles.splice(i, 1); 
      model.participant.hasRoles = model.participant.roles.length > 0; 
      if (model.participant.hasRoles) { 
      model.participant.selected = model.participant.roles[0]; 
      } 
      return; 

     } 

     } 
    } 
    }; 
} 

回答

0

因为函数稍后会执行(这是一个承诺),所以您可能需要提供model变量作为注入参数。

在你.then功能,尝试model变量注入这样的:

.then(function(model) { 
    console.log(model) 
}); 
+0

呀 - 我肯定试过了。我希望它也会那么简单。发生此错误:'app.js:26未捕获(承诺中)TypeError:无法读取未定义的属性'角色' – RichC