javascript - 从父范围数组中删除元素

标签 javascript jquery html css angularjs

在用户单击删除按钮后,我试图从我的 Controller 中定义的 json 数组中删除一个元素。该按钮位于指令的 html 模板内。

这是我的 Controller

listVMS.controller('vmInfoController', ['$scope', function($scope) {
  var json = [{
             image: 'img/fedora.png',
             status: 'running',
             name: 'Fedora',
             ip: '192.168.3.354',
             cores: '5',
             ram: '2GB',
             storage: '20GB'
             }];
  $scope.vms = json;

  $scope.removeVM = function() {
    alert("Hello, World");
  };
}]);

我的指令

listVMS.directive('vmInfo', function() { 
  return { 
    restrict: 'E', 
    scope: { 
      info: '=', 
      rmv: '&',
    }, 
    templateUrl: 'views/vmInfo.html',
    link: function(scope, element, attrs) {
      if(scope.info.status == 'running') {
        scope.buttonText = 'Pause';
        scope.act = 'pause';
      }
      else {
        scope.buttonText = 'Play';
        scope.act = 'play-circle';        
      }

      scope.sos = function() {
        if (scope.info.status == 'paused') {
          scope.info.status = "running";
          scope.buttonText = "Pause";
          scope.act = "pause";
        }
        else {
          scope.info.status = "paused";
          scope.buttonText = "Play";
          scope.act = "play-circle";
        }
      }
      scope.deleteVM = function(){
        scope.rmv();
      }
    },
  };
});

我正在使用 ng-repeat 在这里重复

<div class="row" ng-repeat="vm in vms">
     <vm-info info="vm"></vm-info>
</div>

在指令的模板中,我有一个应该触发 ng-click() 的按钮

<button type="button" class="btn btn-danger btn-lg center-block" ng-click="removeVM">Delete <span class='glyphicon glyphicon-remove'></span></button>

我想单击删除按钮并从范围中删除特定元素。因此,当范围被重新加载时,该元素的 div 也不会在那里,但 onclick 不会从模板内部触发。请帮助我是 angularjs 的新手,指令对我来说很棘手。

最佳答案

在您的指令中,您尝试绑定(bind) rmv 但您从未将 rmv 传递给 vm-info 指令。

<div class="row" ng-repeat="vm in vms">
     <vm-info info="vm" rmv="removeVM"></vm-info>
</div>

点击时将评估 ng-click。我猜它应该将 VM 传递给 Controller ​​。您可以将 rmv 函数直接传递给 ng-click 并在指令中取出 deleteVM 方法,而不是让指令通过中间方法调用此方法。

<button type="button"
        class="btn btn-danger btn-lg center-block"
        ng-click="rmv(info)">
    Delete <span class='glyphicon glyphicon-remove'></span>
</button>

最后,controller 接收到 vm 并移除它。

$scope.removeVM = function(vm){
    // remove vm from $scope.vms
}

关于javascript - 从父范围数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686738/

相关文章:

javascript - 切换全部展开/全部折叠

javascript - Jquery ajax 请求不起作用

jquery - 访问 JSON 元素时返回 "object Object"或未定义

Javascript - 在页面加载时将类添加到 li 类的子级

html - css3 在另一个 div 下投影,z-index 不工作

javascript - 如何添加 rangeslider.js 以控制 Slick Slider 的拖动

javascript - 在 Facebook 上发帖 ... 工作正常但在控制台中抛出错误 为什么?

javascript - 单击按钮切换元素 View

javascript - 选择所有具有指定字符串的div

javascript - 保存带有内部元素的 div 并向所有人展示