使用ng-options无法正常工作时,选择下拉列表上的启用/禁用按钮

时间:2016-06-18 08:37:54

标签: javascript angularjs

我有一个表格,每行都有一个下拉列表选项,我只想在下拉状态完成时创建一个上传按钮(才能工作)。现在它不能正常工作 How can I plot my R Squared value on my scatterplot using R?

  <body ng-app='saapp', ng-controller = "homeCtrl">
<body>
<table>
  <tr data-ng-repeat="test in tests ">
    <td>{{$index+1}}</td>
    <td>{{test}}</td>
    <td style="color:red"> pending</td>
    <td><font size="2" color="red"></font>
      <select ng-model="checkStatus" ng-init="checkStatus='NotDone'", ng-options="status.sta as status.name for status in status" ng-change="changePayStatus(checkStatus)"></select>
    </td>
    <td class="col-md-2">
      <P>
<button type="button" ng-show="!pictureEditor" ng-click="pictureEditor = true" ng-disabled="enableUpload" class="btn-primary btn-u-xs">Upload </button>
<div ng-show="pictureEditor">
 <input type="file" name="file" onchange="angular.element(this).scope().selectFile(this.files)"/>
<div ng-show="pictureEditor" class="input-group"><span class="input-group-btn">

<button ng-click="saveDiagnosticReport(test, appointmentDetails); pictureEditor = false " class="btn btn-default">Save &nbsp;<i class="input-save fa fa-check-square"></i></button>
<button ng-click="pictureEditor = false" class="btn btn-default">Back &nbsp;<i class="fa fa-undo"></i></button></span></div>
        </div>
      </P>
    </td>
  </tr>
  <table>
</body>

角度控制器

    var app = angular.module('saapp',[ ]);
app.controller('homeCtrl', function($scope){
$scope.tests = ["A", "B", "C"] 
 $scope.status = [{name :"Done", sta : 1}, {name : "NotDone", sta : 0}];
   $scope.enableUpload = 1;
 $scope.changePayStatus = function(status) {
          console.log(status);
            if(status == '1') {
                $scope.enableUpload = 0;
            }
            else if(status == "0") {
                $scope.enableUpload = 1;

            }
            };
})

1 个答案:

答案 0 :(得分:2)

你需要将每一行的上传按钮的不良状态绑定到$ scope内的不同模型,这样做的一种方法就是将每一行的残疾状态保存在其中,所以你需要更改测试数组到这样的对象:

$scope.tests = [{name:"A",disabled:1}, {name:"B",disabled:1}, {name:"C",disabled:1}] 

disabled现在保持每行的上传按钮残疾状态。 通过这种方式更改测试,您需要像下面那样更改代码以实现您的目标:

<table>
  <tr data-ng-repeat="test in tests ">
    <td>{{$index+1}}</td>
    <td>{{test.name}}</td>
    <td style="color:red"> pending</td>
    <td><font size="2" color="red"></font>
       <select ng-model="checkStatus" ng-init="checkStatus='NotDone'"
       ng-options="status.sta as status.name for status in status"
       ng-change="changePayStatus(checkStatus,test)"></select>
    </td>
    <td class="col-md-2">
      <p>
           <button type="button" ng-show="!pictureEditor" ng-click="pictureEditor = true"
            ng-disabled="test.disabled" class="btn-primary btn-u-xs">Upload </button>
         ...
      </p>
    </td>
  </tr>
<table>

已编辑:正如您在HTML中看到的那样,我已将test的{​​{1}}对象传递给ng-repeat changePayStatus方法,虽然testtests的成员,但我们已从范围中获得tests,因此test它来自范围,而角度将处理更改在它上面,你可以在视图中将你从范围获得的模型再次传递给控制器​​,并且角度处理其余部分。 所以你还需要改变这样的控制器:

app.controller('homeCtrl', function($scope){
     $scope.tests = [{name:"A",disabled:1}, {name:"B",disabled:1}, {name:"C",disabled:1}] 
     $scope.status = [{name :"Done", sta : 1}, {name : "NotDone", sta : 0}];
     $scope.changePayStatus = function(status,testItem) {
         console.log(status);
         if(status == 1) {
            testItem.disabled= 0;
         }
         else if(status == 0) {
            testItem.disabled= 1;

         }
     };
});

可以找到已编辑的工作样本Here

希望有所帮助。