来自单选按钮的ng-model始终是不受限制的

时间:2016-02-20 08:09:11

标签: javascript angularjs

当我点击事件时,ng-model总是未定义的。我想获得所选的值。 别名名称效果很好。

<div ng-if="post.direction != 'digital_in' && post.direction != 'digital_out'">
    <label><input data-ng-model="dir" type="radio" name="direction" value="digital_in">digital input</label>
    <label><input data-ng-model="dir" type="radio" name="direction" value="digital_out">digital output</label>
    {{dir}}
 </div>

<td><button type="submit" class="btn btn-warning" ng-click="updatePin(post, alias, direction.value())"><span class="glyphicon glyphicon-edit" aria-hidden="true"></span></button></td>

这是控制器:

$scope.updatePin = function(post, alias, dir){
    console.log(post.id);

    post.alias = "" + alias;
    post.direction = "" + dir;
    $http.post('http://localhost:9000/activePinsUpdate?id=' + post.id , post).success(function(data, status) {
        $scope.loadData();
    });
};

3 个答案:

答案 0 :(得分:1)

ngValue 与ng-model一起用作对象属性

喜欢这个

<div ng-if="post.direction != 'digital_in' && post.direction != 'digital_out'">
    <label><input data-ng-model="post.dir" type="radio" name="direction" ng-value="digital_in">digital input</label>
    <label><input data-ng-model="post.dir" type="radio" name="direction" ng-value="digital_out">digital output</label>
    {{dir}}
 </div>

你可以像你这样在你的ctrl中访问它

post.alias = "" + alias;
post.direction = "" + post.dir;

答案 1 :(得分:1)

ng-if指令确实创建了一个子范围,该范围是从父范围原型继承的。

  

对比原型继承意味着什么?

     

如果您有范围层次结构,则可以访问父范围属性   在子范围内,仅当这些属性是对象时(最初   引用的对象传递给子范围而不创建新的   参考)。但原始数据类型在子级内部无法访问   范围,如果你查看你的代码addCustom范围变量是   原始数据类型。

问题是dir变量与ng-model中使用的无线电ng-if是原始数据类型。因此,当ng-if呈现div时,它确实会在那里创建一个具有dir值的子范围。因此,控制器dir变量与ng-if的单选按钮dir范围变量不同。

要解决此问题,您需要从

更改
data-ng-model="dir"

data-ng-model="post.dir"

这样就可以使用DOT rule来跟踪原型继承规则。

从post对象中只有你可以得到值post.dir按钮,然后不需要传递它dir的显式值。我不打算解释场景背后究竟发生了什么,因为你可以在这里引用this similar answer,其他方法可以完成这件事。

答案 2 :(得分:0)

您可能需要在小提琴中分享您的代码,这是获得帮助的好方法。

  

建议: - 您可能需要使用Pre-Angular Binded UI - Angular ui   http://angular-ui.github.io/bootstrap/versioned-docs/0.12.0/#/getting_started   如果您是初学者尝试从上面的链接开始因为这些   已经与angularjs结合。所以你不会面对面   问题。

     

您正在使用Pure Html与角度绑定创建混乱。最后了解角度UI。

解决方案: - 缺少的东西是 ng-value

<div ng-if="post.direction != 'digital_in' && post.direction != 'digital_out'">
    <label><input data-ng-model="dir" type="radio" name="direction" ng-value="digital_in" ng-checked='true'>digital input</label>
    <label><input data-ng-model="dir" type="radio" name="direction" ng-value="digital_out">digital output</label>
    {{dir}}
 </div>

如果仍无法正常工作

预先定义$scope.dir='digital_in'; // it updates on selecting radio.

$scope.updatePin = function(post, alias, dir){
    console.log(post.id);
    post.alias = "" + alias;
    post.direction = "" + $scope.dir;   //value Updates on Check 

    $http.post('http://localhost:9000/activePinsUpdate?id=' + post.id , post).success(function(data, status) {
        $scope.loadData();
    });
};

祝你好运!!