Javascript 如何以编程方式选择ng选项值?
我有一个充满下拉列表的视图来过滤报告。我还有一个显示为链接的已保存过滤器的视图。当用户单击他们保存的过滤器时,我希望选择DropDownList的适当值。下拉列表已正确填充。在保存的筛选器链接上有一个Javascript 如何以编程方式选择ng选项值?,javascript,angularjs,angularjs-ng-options,Javascript,Angularjs,Angularjs Ng Options,我有一个充满下拉列表的视图来过滤报告。我还有一个显示为链接的已保存过滤器的视图。当用户单击他们保存的过滤器时,我希望选择DropDownList的适当值。下拉列表已正确填充。在保存的筛选器链接上有一个ng单击,它将调用一个函数,该函数迭代保存的筛选器值集合并自动选择正确的值。我不知道如何以编程方式设置所选选项。非常感谢您的帮助 <select uid="locSelect" class="span12" ng-model="reportDetail.se
ng单击
,它将调用一个函数,该函数迭代保存的筛选器值集合并自动选择正确的值。我不知道如何以编程方式设置所选选项。非常感谢您的帮助
<select uid="locSelect"
class="span12"
ng-model="reportDetail.selectedLoc"
ng-options="loc.dbid as loc.serviceName for loc in reportDetail.locList | orderBy:'name'">
<option uid="unselectedLocOption" value="">-- Select One --</option>
</select>
--选择一个--
以下是已保存过滤器的列表:
<div class=" well fixed-search" style="overflow-x: hidden;overflow-y: auto;">
<div class="well-header">
Saved Filters
</div>
<div ng-if="!hasSavedFilters">
<span>No saved filters</span>
</div>
<ul ng-if="hasSavedFilters" class="nav nav-list dashboard-list">
<li ng-repeat="filter in reportDetail.savedFilters">
<a uid="savedFilter" href="" ng-click="reportDetail.loadSavedFilters(filter.filters)">
<span ng-bind="filter.title"></span>
</a>
</li>
</ul>
保存的过滤器
没有保存的筛选器
-
这是我的控制器
(function(){
'use strict';
var ReportDetailController = function(ReportsService, $scope){
var _locList = {};
var _hospitalStatusList = {};
var _providerStatusList = {};
var _savedFilters = [];
var _sourceTypeList = {};
var _dateRangeList = {};
var _init = function(){
ReportsService.getCurrentReportSavedFilters().then(function(data){
$scope.reportDetail.savedFilters =data;
$scope.hasSavedFilters = ReportsService.hasSavedFilters();
});
ReportsService.getLOCListForDDL().then(function(data){
$scope.reportDetail.locList = data;
//$scope.reportDetail.selectedLoc = $scope.reportDetail.locList[0];
});
ReportsService.getSelectListData()
.then(function(data){
$scope.reportDetail.sourceTypeList = data.CONNECTION_TARGET_STATUS;
$scope.reportDetail.hospitalStatusList = data.CONNECTION_SOURCE_STATUS;
});
ReportsService.getDateRangesForDDL()
.then(function(data){
$scope.reportDetail.dateRangeList = data;
});
$scope.reportDetail.providerStatusList = ReportsService.getProviderStatusForDDL();
};
var _loadSavedFilters = function(filters){
for(var i = 0, l = $scope.reportDetail.locList.length; i<l; i++){
if($scope.reportDetail.locList[i].serviceName == filters.levelOfCare){
$scope.reportDetail.selectedLoc = $scope.reportDetail.locList[i];
console.log($scope.reportDetail.selectedLoc);
}
}
}
var _isActive = function(filter){
for(var i = 0, l = $scope.reportDetail.savedFilters.length; i<l; i++){
if(filter.title == $scope.reportDetail.savedFilters[i].title){
return true;
}
return false;
}
}
var _generateReport = function(){
return ReportsService.generateReport();
};
$scope.reportDetail = {
init: _init,
selectedLoc: null,
isActive: _isActive,
locList: _locList,
selectedHospitalStatus: 'NOTIFIED',
hospitalStatusList: _hospitalStatusList,
selectedProviderStatus: 'NEW',
providerStatusList: _providerStatusList,
selectedSourceType: 'CONNECTED',
sourceTypeList: _sourceTypeList,
selectedDateRange: '',
dateRangeList: _dateRangeList,
savedFilters: _savedFilters,
loadSavedFilters: _loadSavedFilters,
generateReport: _generateReport
};
$scope.reportDetail.init();
};
app.controller('ReportDetailController', ['ReportsService', '$scope', ReportDetailController]);
})();
(函数(){
"严格使用",;
var ReportDetailController=函数(ReportsService$scope){
var_locList={};
var_hospitalStatusList={};
var_providerStatusList={};
var_savedFilters=[];
var_sourceTypeList={};
var_dateRangeList={};
var_init=函数(){
ReportsService.getCurrentReportSavedFilters()。然后(函数(数据){
$scope.reportDetail.savedFilters=数据;
$scope.hasSavedFilters=ReportsService.hasSavedFilters();
});
ReportsService.getLOCListForDDL().then(函数(数据){
$scope.reportDetail.locList=数据;
//$scope.reportDetail.selectedLoc=$scope.reportDetail.locList[0];
});
ReportsService.getSelectListData()
.then(功能(数据){
$scope.reportDetail.sourceTypeList=data.CONNECTION\u TARGET\u STATUS;
$scope.reportDetail.hospitalStatusList=data.CONNECTION\u SOURCE\u STATUS;
});
ReportsService.getDateRangesForDDL()
.then(功能(数据){
$scope.reportDetail.dateRangeList=数据;
});
$scope.reportDetail.providerStatusList=ReportsService.getProviderStatusForDDL();
};
var\u loadSavedFilters=函数(过滤器){
对于(var i=0,l=$scope.reportDetail.locList.length;i您只需将ng model
设置为它应该是什么,因此在本例中,您可以将reportDetail.selectedLoc
设置为它应该是什么
例如:
注意:确保它们具有相同的类型,因此在您的示例中,确保它们都是整数或字符串,如果一个为5073
,另一个为“5073”
我更新了小提琴,以显示字符串和数字的作用不同。您需要自定义指令或类似的指令
方法1
{{val.name}}
方法1
{{val.name}}
来源(注意范围变更)
{{dbs}}
您还可以使用ng change
执行一些复杂的操作ng模型和表达式馈送ng选项-必须-匹配,以便Angular比较值并查看“选择”了哪个选项。正如“dave”所示。由于时间限制,我最终选择了不同的路线。我在服务中创建了一个事件总线在我的控制器中分层并订阅偶数,更新模型,并在选择ng的情况下使用ng repeat
我仍然有兴趣了解为什么这不适用于ng选项。型号和ng选项类型匹配,并且所有内容似乎都已正确连接。当我有更多时间时,我将重新解决原始问题。感谢所有回复者!如果我理解,总之,您有一个选择,其中包含一个列表,并且您希望以编程方式设置要选择的选项之一,将其键入为默认值,对吗
如果是这样,您可以使用ng选项轻松解决此问题,只需将控制器实例与范围相关联,并将列表的位置指定给select的模型,例如:
选择HTML
<select ng-model="vm.aluno_id" name="aluno_id" ng-options="aluno.nome for aluno in alunos">
我希望我已经帮助了hmm…我想这就是我正在做的。我已经将ng模型设置为reportDetail.selectedLoc。单击链接时,LoadSavedFilter会启动并将reportDetail.selectedLoc设置为新值…但它不会改变。我几乎肯定我知道问题所在,因为我曾经花了几个小时调试它。确保它们是ei对于两个整数或两个字符串,如果一个为5073
,另一个为“5073”,则不知道它们是相同的
也不是这样。两者都是整数。还有一件事需要检查。如果您在复杂表单上有一个长时间运行的init序列,并且希望设置一些选择框默认值,那么您可能需要在实现的isReady标志上设置$watch,然后调用$timeout(function(){$scope.$apply(function(){viewmodel.value=desiredValue;})},0)因为您可能在Angular的摘要循环未拾取的时间更改viewmodel值。两者匹配…仍然没有运气。哦-当我写“必须匹配”时我的意思是ng模型和选项都需要从同一个数组/objs馈送-不是ng模型数组中的某个项的值与选项数组中的值匹配-它们不会按值进行比较。堆栈溢出。请编辑您的帖子或评论以符合此规则,或者将其删除。您可以在这些特定于语言的Stac中重新发布它允许非英语的k溢出社区:,。您可能希望在删除它之前对其进行翻译(StackOverflow=English)。
<select ng-model="vm.aluno_id" name="aluno_id" ng-options="aluno.nome for aluno in alunos">
app.controller("auxiliarController", function( $scope){
//instancia controller;(Controller instance;)
var vm = this;
$scope.vm = vm;
//carregando lista no scope, que será utilizado pelo angular no select
//Loading list in scope, which will be used by angular in select
$scope.alunos = [{id: 1, nome: "aa"}, {id: 2, nome: "bb"}];
//setando item default no select
$scope.vm.aluno_id = $scope.alunos[0];
});