Angular ng-value 不适用于输入收音机
Angular ng-value doesn't work with input radio
我有 3 个无线电输入绑定到 ctrl.poiType
,其中 ctrl 是控制器,poiType 是一个整数。
ctrl.poiType
可以具有由四个常量指定的 3 个值之一
(ctrl.TYPE_TRIP, ctrl.TYPE_EVENT, ctrl.TYPE_POI).
所以我创建了三个输入收音机,使用 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
<div class="btn-group btn-group-justified"
data-toggle="buttons">
data-toggle="buttons"
正在隐藏单选按钮。如果你删除它,它将显示
我成功了:
<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 中声明它(通常,您希望在正文中进行标签)。然后你可以创建一个控制器并使用 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);
};
});
我假设您要解决的问题是在您单击所选按钮时使其显示为活动状态。由于您使用的是 Bootstrap 样式而不使用 Bootstrap javascript 组件,因此您需要在 Angular.
中自行完成这项工作
要使单选按钮显示为“已选中”,您必须将活动样式应用于标签的 class 列表。
Preselected options need .active
For preselected options, you must add the .active class to the input's label yourself.
在Angular中动态修改元素的class列表的方法是使用ng-class。您需要阅读该指令的文档,因为有几个选项可以让它发挥作用。
我已经更新了您的示例以使用 ng-class 指令,它现在使按钮在您单击时显示为活动状态。
我不建议完全这样做,尤其是让您的控制器负责 CSS classes 的部分,但这是您了解的一个很好的起点在您的情况下最好的方法。
查看
<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';
}
}
});
这是link工作fiddle。
我有 3 个无线电输入绑定到 ctrl.poiType
,其中 ctrl 是控制器,poiType 是一个整数。
ctrl.poiType
可以具有由四个常量指定的 3 个值之一
(ctrl.TYPE_TRIP, ctrl.TYPE_EVENT, ctrl.TYPE_POI).
所以我创建了三个输入收音机,使用 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
<div class="btn-group btn-group-justified"
data-toggle="buttons">
data-toggle="buttons"
正在隐藏单选按钮。如果你删除它,它将显示
我成功了:
<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 中声明它(通常,您希望在正文中进行标签)。然后你可以创建一个控制器并使用 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);
};
});
我假设您要解决的问题是在您单击所选按钮时使其显示为活动状态。由于您使用的是 Bootstrap 样式而不使用 Bootstrap javascript 组件,因此您需要在 Angular.
中自行完成这项工作要使单选按钮显示为“已选中”,您必须将活动样式应用于标签的 class 列表。
Preselected options need .active
For preselected options, you must add the .active class to the input's label yourself.
在Angular中动态修改元素的class列表的方法是使用ng-class。您需要阅读该指令的文档,因为有几个选项可以让它发挥作用。
我已经更新了您的示例以使用 ng-class 指令,它现在使按钮在您单击时显示为活动状态。
我不建议完全这样做,尤其是让您的控制器负责 CSS classes 的部分,但这是您了解的一个很好的起点在您的情况下最好的方法。
查看
<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';
}
}
});
这是link工作fiddle。