在第二次点击时评估ng-click功能(或,取消点击)

时间:2015-09-20 23:53:03

标签: angularjs angularjs-ng-click

--- HTML ---

<div class="btn-group menuSection">
    <div class="menuGrid" ng-repeat="main in mains">
        <button type="button" class="btn btn-default btn-sm btn-block"
            ng-value="main" btn-radio="main" ng-model="$parent.selectedMain" 
            ng-click="setDish();"/>
        {{main}}
    </div>
    <div class="menuGrid">
        <input type="text" class="form-control input-sm" 
            ng-model="mainOtherText" ng-show="selectedMain == 'Other'" 
            placeholder="enter other here"/>
    </div>
    test : {{mainDish}}
</div>


--- JS ---

$scope.setDish = function(){
    if ($scope.selectedMain == 'Other') {
        $scope.mainDish = $scope.mainOtherText;
    } 
    else {
       $scope.mainDish = $scope.selectedMain;
    }
};

我有一个用于选择菜单项的单选按钮网格,其中最后一个是&#39;其他&#39;。当&#39;其他&#39;选中后,文本框会显示用户输入另一个项目的位置。我的ng-click功能的目标是使用其他文本框中的值更新变量mainDish,其他&#39;其他&#39;被选中。

此代码有效,但问题出现在变量mainDish仅在取消选择单选按钮时才更新。

示例 - 首次单击按钮时,它对变量mainDish没有影响,但是当单击另一个按钮时,mainDish将更新为单击的第一个按钮的值。

关于为什么会发生这种情况的任何想法或我可以解决的方法?

编辑: 根据评论,我会更多地解释我的代码。我有一个菜单,一个用户选择的餐点列表。此列表由ng-repeat命令填充,从一系列餐食中获取并为每个菜单创建一个单选按钮。数组中的最后一项是名为&#39;其他&#39;的项目。当&#39;其他&#39;如果选中,则会出现一个文本框,以便用户可以输入自己的菜肴。

我想要的是:我希望为变量mainDish分配&#39;其他&#39;文本框当&#39;其他&#39;选择了收音机盒。对于所有其他项目,mainDish的值只是单选按钮的值,但&#39;其他&#39;的情况并非如此。

我有什么:它有效!但奇怪的是。仅当取消选择单选按钮时,才会更新变量mainDish。每次单击新的单选按钮时,变量mainDish都会被赋予前一个按钮的值。这是我需要帮助解决的问题。

1 个答案:

答案 0 :(得分:3)

问题是opDict = {} for key in list2: opDict[str(key)] = 0 for elem in list2: for dictElem in list1: if str(elem) in dictElem: opDict[str(elem)] += int(dictElem[str(elem)][0]) 在更新范围的ng-click代码之前触发。如果您将其更改为使用ng-model,则会修复它。您还需要在文本框中添加ng-change,以便在用户输入时更新范围。

ng-change

以下是一个工作示例:http://jsfiddle.net/bnzwx94b/2/