ng-disabled无法处理$ scope变量

时间:2015-09-17 16:01:46

标签: javascript angularjs angular-material

我有一个表格,其中的行与用户创建的管道相对应。可以选择启动或停止该管道。如果管道正在运行,则相应的"开始"应该禁用Button,以及管道现在开始启动(在startPipeline ajax调用的成功函数被触发之前)。因此,每当用户点击"开始"我将一个范围变量设置为true,这应该禁用启动按钮,直到它在success函数中重新启用。但是ng-disabled似乎不起作用。我的部分HTML(起始部分,停止是相同的):

<tr ng-repeat="pipeline in pipelines" ng-click="showPipeline(pipeline)" >
                        <td>{{$index+1}}</td>
                        <td>{{pipeline.name}}<br/>{{pipeline.description}}</td>
                        <td>TBD</td>
                        <td>{{pipeline.running == true ? 'Running' : 'Idle'}}</td>
                        <td><md-button  ng-click="startPipeline(pipeline._id)" class="md-icon-button md-raised" ng-disabled="starting || pipeline.running == true"> 

以及我的控制器的重要部分:

$scope.starting = false;
$scope.stopping = false;
$scope.startPipeline = function(pipelineId) {
        $scope.starting = true;
        console.log("starting pipeline");
        restApi.startPipeline(pipelineId)
            .success(function(data) {
                $scope.starting = false;
                ...
            })
            .error(function(data){
                $scope.starting = false;
                ...
            });
    };

1 个答案:

答案 0 :(得分:0)

使用ng-show可能是更好的方法:

<md-button  ng-click="startPipeline(pipeline._id)" class="md-icon-button md-raised" ng-show="starting || pipeline.running">

如果您只使用变量开始 pipeline.running ,则无需将其值与truefalse进行比较。

var使用true!var使用false

顺便说一句:如果通过设置控制器中的值来显示/隐藏按钮,请通过$scope.$apply();

通知您的应用有关更改