在 angularjs 中将选项值绑定到 ng-model
Bind options value to ng-model in angularjs
我正在做一个项目,我需要将选项值绑定到对象键,这样在 select 一个选项时,它给出 1,否则其他变量保持 0。
我的HTML代码:-
<select required class="custom-select">
<option disabled>Select an option</option>
<option ng-model="PredictCtrl.detail.building_type_AP">Apartment</option>
<option ng-model="PredictCtrl.detail.building_type_GC">Independent House / Villa</option>
<option ng-model="PredictCtrl.detail.building_type_IF">Independent Floor / Builder's Floor</option>
<option ng-model="PredictCtrl.detail.building_type_IH">Gated Community Villa</option>
</select>
要绑定的变量 -
PredictCtrl.detail = {
building_type_AP: 0,
building_type_GC: 0,
building_type_IF: 0,
building_type_IH: 0
}
一般来说,绑定是用 select 标签完成的,它给出了 selected 选项的值,但我想要这样的方式, 当我点击 Apartment 选项时,它的绑定变量 PredictCtrl.detail.building_type_AP 变为 1,其余仍然为 0。类似地,它与其他选项.
我想通过API发送相同格式的数据。
所以,请帮帮我。
对不起,如果我解释的不是很清楚或有任何错别字。
提前致谢。
您应该看一下 NgOptions 指令,它是使用 select 标签的 "angularjs" 方式。
它应该能够满足您的要求,因为您将在 SelectedOption
对象中获得 selected 选项。
这是一个例子
angular.module("app",[]).controller("myCtrl",function($scope){
$scope.details =
[
{name:"Apartment", value:1},
{name:"Independent House / Villa", value:2},
{name:"Independent Floor / Builder's Floor", value:3},
{name:"Gated Community Villa", value:4}
];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<select required class="custom-select" ng-options="item as item.name for item in details" ng-model="selectedOption">
</select>
<p>SelectedOption: {{selectedOption}}</p>
</div>
这样试试:
在你的控制器中:
$scope.details = [
{
name: "building_type_AP",
value: "Apartment",
state: false
},{
name: "building_type_GC",
value: "Independent House / Villa",
state: false
}/*add more here*/
];
$scope.setActive = function(detail){
detail.state = !detail.state;
}
在 html 模板中:
<select required class="custom-select">
<option disabled>Select an option</option>
<option ng-repeat="detail in details" ng-click="setActive(detail)">{{detail.value}}</option>
</select>
最后只需通过 $scope.details 并将 false 解析为 0,将 true 解析为 1 或者在 setActive 函数中执行此操作
None 在我撰写本文时的答案实际上提供了一个有效的解决方案,所以这里有一个。
不要将 ng-model
指令分散到不同的 option
元素中,这是不必要的。
您可以通过使用 ng-options
枚举所有选择,使用单个 ng-model
跟踪所选选项,并使用 ng-change
应用值来实现您想要的效果您描述了(即 1
在所选键上,0
用于其他所有内容)。
我假设您需要保持 detail
的结构不变。如果它可以更改,那么我建议将每个标签与其各自的每个标签相关联 building_type_
以将它们放在一起。
见下文。
angular
.module('app', [])
.controller('PredictCtrl', function () {
this.selectedDetail = null;
this.detail = {
building_type_AP: 0,
building_type_GC: 0,
building_type_IF: 0,
building_type_IH: 0,
};
this.labels = {
building_type_AP: 'Apartment',
building_type_GC: 'Independent House / Villa',
building_type_IF: 'Independent Floor / Builder\'s Floor',
building_type_IH: 'Gated Community Villa',
};
this.changeDetail = function () {
for (var key in this.detail) {
this.detail[key] = +(this.selectedDetail === key);
}
};
});
<script src="https://unpkg.com/angular@1.7.4/angular.min.js"></script>
<div ng-app="app" ng-controller="PredictCtrl as PredictCtrl">
<select
ng-model="PredictCtrl.selectedDetail"
ng-options="key as PredictCtrl.labels[key] for (key, value) in PredictCtrl.detail"
ng-change="PredictCtrl.changeDetail()"></select>
<pre>{{ PredictCtrl.detail | json }}</pre>
</div>
我正在做一个项目,我需要将选项值绑定到对象键,这样在 select 一个选项时,它给出 1,否则其他变量保持 0。
我的HTML代码:-
<select required class="custom-select">
<option disabled>Select an option</option>
<option ng-model="PredictCtrl.detail.building_type_AP">Apartment</option>
<option ng-model="PredictCtrl.detail.building_type_GC">Independent House / Villa</option>
<option ng-model="PredictCtrl.detail.building_type_IF">Independent Floor / Builder's Floor</option>
<option ng-model="PredictCtrl.detail.building_type_IH">Gated Community Villa</option>
</select>
要绑定的变量 -
PredictCtrl.detail = {
building_type_AP: 0,
building_type_GC: 0,
building_type_IF: 0,
building_type_IH: 0
}
一般来说,绑定是用 select 标签完成的,它给出了 selected 选项的值,但我想要这样的方式, 当我点击 Apartment 选项时,它的绑定变量 PredictCtrl.detail.building_type_AP 变为 1,其余仍然为 0。类似地,它与其他选项.
我想通过API发送相同格式的数据。
所以,请帮帮我。 对不起,如果我解释的不是很清楚或有任何错别字。
提前致谢。
您应该看一下 NgOptions 指令,它是使用 select 标签的 "angularjs" 方式。
它应该能够满足您的要求,因为您将在 SelectedOption
对象中获得 selected 选项。
这是一个例子
angular.module("app",[]).controller("myCtrl",function($scope){
$scope.details =
[
{name:"Apartment", value:1},
{name:"Independent House / Villa", value:2},
{name:"Independent Floor / Builder's Floor", value:3},
{name:"Gated Community Villa", value:4}
];
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script>
<div ng-app="app" ng-controller="myCtrl">
<select required class="custom-select" ng-options="item as item.name for item in details" ng-model="selectedOption">
</select>
<p>SelectedOption: {{selectedOption}}</p>
</div>
这样试试:
在你的控制器中:
$scope.details = [
{
name: "building_type_AP",
value: "Apartment",
state: false
},{
name: "building_type_GC",
value: "Independent House / Villa",
state: false
}/*add more here*/
];
$scope.setActive = function(detail){
detail.state = !detail.state;
}
在 html 模板中:
<select required class="custom-select">
<option disabled>Select an option</option>
<option ng-repeat="detail in details" ng-click="setActive(detail)">{{detail.value}}</option>
</select>
最后只需通过 $scope.details 并将 false 解析为 0,将 true 解析为 1 或者在 setActive 函数中执行此操作
None 在我撰写本文时的答案实际上提供了一个有效的解决方案,所以这里有一个。
不要将 ng-model
指令分散到不同的 option
元素中,这是不必要的。
您可以通过使用 ng-options
枚举所有选择,使用单个 ng-model
跟踪所选选项,并使用 ng-change
应用值来实现您想要的效果您描述了(即 1
在所选键上,0
用于其他所有内容)。
我假设您需要保持 detail
的结构不变。如果它可以更改,那么我建议将每个标签与其各自的每个标签相关联 building_type_
以将它们放在一起。
见下文。
angular
.module('app', [])
.controller('PredictCtrl', function () {
this.selectedDetail = null;
this.detail = {
building_type_AP: 0,
building_type_GC: 0,
building_type_IF: 0,
building_type_IH: 0,
};
this.labels = {
building_type_AP: 'Apartment',
building_type_GC: 'Independent House / Villa',
building_type_IF: 'Independent Floor / Builder\'s Floor',
building_type_IH: 'Gated Community Villa',
};
this.changeDetail = function () {
for (var key in this.detail) {
this.detail[key] = +(this.selectedDetail === key);
}
};
});
<script src="https://unpkg.com/angular@1.7.4/angular.min.js"></script>
<div ng-app="app" ng-controller="PredictCtrl as PredictCtrl">
<select
ng-model="PredictCtrl.selectedDetail"
ng-options="key as PredictCtrl.labels[key] for (key, value) in PredictCtrl.detail"
ng-change="PredictCtrl.changeDetail()"></select>
<pre>{{ PredictCtrl.detail | json }}</pre>
</div>