显示/隐藏基于Controller布尔变量的AngularJS元素

时间:2014-08-07 16:19:21

标签: angularjs angularjs-controller

我试图隐藏/显示基于Controller布尔变量的表单的一部分。这是我的HTML代码:

<div id="sheetform-container" ng-controller="SheetController as SheetCtrl">
  <form action="#">
    <div class="sheetform-row" ng-show="canShow('Price')">
      <div class="sheetform-left-col fl-left"><label for="sheetform-price">Price</label></div>
      <div class="sheetform-midlle-col fl-left"><input type="text" class="sheetform-input" id="sheetform-price" name="price" value="$ 0.00" /></div>
      <div class="sheetform-right-col fl-right"></div>
    </div>
  </form>
</div>

我创建了一个函数,根据发送的值将Price属性更改为true / false,称为setConfig。这就是Controller代码的样子:

ngApp.controller('SheetController', ['$scope', function($scope) {
    $scope.Price = true;

    $scope.canShow = function(field) {
        return $scope.Price;
    }

    $scope.setConfig = function(config) {
        $scope.Price = config.Price;
    }
}]);

知道我错过了什么吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

如果您打算将价格作为某物的实际价格,那么在这种情况下您不应该将其用于布尔值。使用ng-model分配价格。另外,不要使用大写字母来命名变量。只有课程应该大写。

<div id="sheetform-container" ng-controller="SheetController as SheetCtrl">
  <form action="#">
    <div class="sheetform-row" ng-show="showPrice">
      <div class="sheetform-left-col fl-left"><label for="sheetform-price">Price</label></div>
      <div class="sheetform-midlle-col fl-left"><input type="text" class="sheetform-input" id="sheetform-price" name="price" ng-model="price" /></div>
      <div class="sheetform-right-col fl-right"></div>
    </div>
  </form>
</div>

然后在您的控制器中,您可以删除您拥有的功能并初始化变量

ngApp.controller('SheetController', ['$scope', function($scope) {
    $scope.showPrice = true;
    $scope.price = null;

}]);

我不确定你是如何确定是否应该显示价格但是你可以将$ scope.showPrice分配给一个属性,无论该形式用于什么对象,或者如果它是一个切换,那么你可以说:

<a href ng-click="showPrice = !showPrice"></a>

答案 1 :(得分:1)

<div class="sheetform-row" ng-show="canShow('Price')"> canShow()函数需要一个布尔值,以便ng-show可以相应地改变输出。

'Price'被视为字符串'Price'而不是控制器中的布尔值。

因此将其更改为ng-show="canShow(Price)",此处Price的值为true / false,这将有助于ng-show隐藏/显示正确。

setConfig现在也没有影响价格。

让我知道它是否有助于您或您需要进一步的帮助。

答案 2 :(得分:0)

你错过了$ digest()。 angular只更新摘要循环中的DOM。

official documentation

$watch how $apply runs $digest