【问题标题】:Get ng-model value in controller when using bootstrap ui radio button使用引导 ui 单选按钮时在控制器中获取 ng-model 值
【发布时间】:2017-05-26 09:22:35
【问题描述】:

我似乎无法将单选按钮的值返回到控制器中...

HTML

<div class="btn-group-wrap">
  <div class="btn-group listBtn text-center">
    <label uib-btn-radio="0" ng-change="newDataset()" ng-model="changeDataset" class="btn btn-default">0</label>
    <label uib-btn-radio="1" ng-change="newDataset()" ng-model="changeDataset" class="btn btn-default">1</label>
    <label uib-btn-radio="undefined" ng-change="newDataset()" ng-model="changeDataset" class="btn btn-default">undefined</label>
  </div>
</div>
<p>filter {{changeDataset}}</p> //i see the change here!!

控制器

$scope.changeDataset = undefined


$scope.newDataset = function () {
  console.log('new dataset function called');
  console.log('the dataset= '+$scope.changeDataset) //but it just returns undefined here!!!
  console.log('the vacated= '+$scope.filter.vacated)
};

它识别出函数正在运行,但它总是只记录undefined

【问题讨论】:

  • 不要对所有单选按钮使用相同的 ng-modal
  • 如果单选按钮链接在一起(即只有一种选择),那么他需要为它们保持相同的 ng-model。
  • 这只是破坏了单选按钮...?
  • 你声明了 '$scope.changeDataset' 吗?在将其用于函数之前?
  • @the_mishra 是的,它仍然没有获取单选按钮的值...

标签: angularjs angular-ui-bootstrap angularjs-ng-model angularjs-ng-change


【解决方案1】:

您的代码有效,undefined 出现在控制台中,因为您尝试记录设置为 undefined$scope.filter.vacated

这是您的代码运行的 sn-p 演示:

angular.module('ui.bootstrap.demo', ['ngAnimate', 'ngSanitize', 'ui.bootstrap']);
angular.module('ui.bootstrap.demo').controller('ButtonsCtrl', function ($scope) {
  $scope.filter = {
    vacated: undefined
  };
  
  $scope.newDataset = function () {
    console.log('new dataset function called');
    console.log('the dataset= ' + $scope.changeDataset);
    console.log('the vacated= ' + $scope.filter.vacated);
  };
});
<html ng-app="ui.bootstrap.demo">
  <head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-animate.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.6.1/angular-sanitize.js"></script>
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-2.5.0.js"></script>
    <script src="example.js"></script>
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
  </head>

<div ng-controller="ButtonsCtrl">
    <pre>{{changeDataset}}</pre>
    <div class="btn-group">
        <label uib-btn-radio="0" ng-change="newDataset()" ng-model="changeDataset" class="btn btn-default">0</label>
        <label uib-btn-radio="1" ng-change="newDataset()" ng-model="changeDataset" class="btn btn-default">1</label>
        <label uib-btn-radio="undefined" ng-change="newDataset()" ng-model="changeDataset" class="btn btn-default">undefined</label>
    </div>
</div>
</html>

【讨论】:

  • 它在我的机器上不起作用...可能与引导/角度版本有关吗?角度=1.5.9 引导 = 3.3.7
  • @Janey Nah,不这么认为。也许某处有错字?再次检查,尝试与我的 sn-p 进行比较... :-)
  • 不,复制并粘贴到我的代码中仍然返回 undefined for $scope.changeDataset...
【解决方案2】:

我通过将 ng-model="changeDataset" 更改为 ng-model="$parent.changeDataset" 来解决此问题

$parent - 映射到包含当前作用域的作用域

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多