0

我有 3 个无线电输入绑定到ctrl.poiType,其中ctrl是控制器,poiType是一个整数。 ctrl.poiType可以具有由四个常量(ctrl.TYPE_TRIP、ctrl.TYPE_EVENT、ctrl.TYPE_POI)指定的 3 个值之一。

所以我创建了三个输入收音机,使用 ng-model 和 ng-value,如下所示:

<label class="btn btn-default">
    <input type="radio" autocomplete="off" 
           ng-value="ctrl.TYPE_TRIP"
           ng-model="ctrl.poiType"  
           ng-change="ctrl.alert()"/>itinerari
</label>

ng-model如果 的值等于,则应检查无线电ng-value,但它不工作。我不知道为什么。

[更新] 这是示例的正确JS Fiddle

4

3 回答 3

1

我假设您要解决的问题是当您单击它时让选定的按钮显示为活动状态。由于您使用的是 Bootstrap 样式而不使用 Bootstrap javascript 组件,因此您需要自己在 Angular 中完成这项工作。

要使单选按钮显示为“选中”,您必须将活动样式应用于标签的类列表。

预选选项需要 .active

对于预选选项,您必须自己将 .active 类添加到输入标签。

在 Angular 中动态修改元素的类列表的方法是使用ng-class。您需要阅读该指令的文档,因为有几个选项可以使其工作。

我已经更新了您的示例以使用 ng-class 指令,现在当您单击它时,它使按钮显示为活动状态。

我不建议完全这样做,尤其是关于让你的控制器负责 CSS 类的部分,但这是一个很好的起点,可以让你找出在你的情况下最好的方法。

看法

<div>poiType is initialized to 0, so the first button should be selected
    <div ng-controller="TodoCtrl as ctrl" style="margin-bottom: 5px; padding: 5px; width:100%;">
        <div class="btn-group btn-group-justified">
            <label ng-class="ctrl.class(ctrl.TYPE_POI)">
                <input type="radio" ng-value="ctrl.TYPE_POI" ng-model="ctrl.poiType" />POI</label>
            <label ng-class="ctrl.class(ctrl.TYPE_TRIP)">
                <input type="radio" autocomplete="off" ng-value="ctrl.TYPE_TRIP" ng-model="ctrl.poiType" />itinerari</label>
            <label ng-class="ctrl.class(ctrl.TYPE_EVENT)">
                <input type="radio" autocomplete="off" ng-value="ctrl.TYPE_EVENT" ng-model="ctrl.poiType" />eventi</label>
        </div>ctrl.poiType = {{ctrl.poiType}}</div>
</div>

控制器

angular.module('epoiApp', [])

    .controller('TodoCtrl', function () {
    this.poiType = 0; // first button should be selected

    this.TYPE_POI = 0;
    this.TYPE_TRIP = 1;
    this.TYPE_WAYPOINT = 2;
    this.TYPE_EVENT = 3;
    this.class = function (poiType) {
        if (poiType == this.poiType) {
            return 'btn btn-default active';
        } else {
            return 'btn btn-default';
        }
    }
});

这是工作小提琴的链接。

于 2015-07-10T14:25:14.820 回答
0

我已经成功了:

<div ng-app="myApp">
  poiType is initialized to 0, so the first button should be selected
  <div ng-controller="TodoCtrl"
       style="margin-bottom: 5px; padding: 5px; width:100%;">
    <div class="btn-group btn-group-justified" 
         data-toggle="buttons">
       <label class="btn btn-default">
          <input type="radio"  ng-value="TYPE_POI"
               ng-model="poiType" 
               ng-change="popup()"/>POI
        </label>
        <label class="btn btn-default">
           <input type="radio" autocomplete="off" 
                  ng-value="TYPE_TRIP ||
                            TYPE_WAYPOINT "
                  ng-model="poiType"  
                  ng-change="popup()"/>itinerari
        </label>
        <label class="btn btn-default">
          <input type="radio" autocomplete="off"  
                 ng-value="TYPE_EVENT"
                 ng-model="poiType" 
                 ng-change="popup()"/>eventi
        </label>    
     </div>         
   </div>         
</div>

您需要为您的 Angular 应用程序创建一个模块来引用,这里我将其命名为 myApp 并在主 div 中声明它(通常,您希望在 body 标记中执行它)。然后您可以创建一个控制器并使用该scope模块来初始化数据,然后如上所示使用它。这里是js。

var myApp = angular.module("myApp", []);

myApp.controller("TodoCtrl", function ($scope) {
    var that = $scope;

    $scope.poiType = 0;

    $scope.TYPE_POI = 0;
    $scope.TYPE_TRIP = 1;
    $scope.TYPE_WAYPOINT = 2;
    $scope.TYPE_EVENT = 3;

    $scope.popup = function () {
        alert(that.poiType);
    };
});

jsfiddle

于 2015-07-10T09:07:56.580 回答
-1
    <div class="btn-group btn-group-justified" 
             data-toggle="buttons">

data-toggle="buttons"正在隐藏单选按钮。如果您删除它,它将显示

于 2015-07-10T08:56:48.997 回答