未在选择标记下拉列表中选择以隐藏其他输入元素的嵌套控制器
Nested controllers that don't select in a select tag dropdown to hide another input element
我有嵌套控制器,我正在使用John Papa的风格指南,所以它们是控制器。一个控制整个表单以进行客户端验证和提交。另一个控制 HTML 视图的一部分,该部分处理位置,并且应该隐藏没有状态的小国家/地区的 STATE 输入,因此不应发生任何输入。
在选择标记中选择国家/地区。下拉列表是来自工厂的 JSON 翻译对象,英语选择有效。如果选择了某些国家/地区,则 STATE 输入应隐藏/消失。第一个问题是这不会发生。我假设用户单击下拉列表中的国家/地区超出了$digest并且必须$timeout()插入它,但它仍然不起作用。我没有使用 ng-click,因为发生了 2 次点击 - 1 次打开选择,另一次进行选择。第二个相关的问题是 CountrySelected 在 SelectCountryController 中未定义,我不知道为什么。如果我对一个国家/地区进行硬编码,它都可以在页面加载时工作,但它从未适用于用户单击选择下拉列表中。
.HTML
<div name = "postApartment4Rent" data-ng-controller = "InputFormController as cntrl">
<form id = "residenceInput" name = "residenceInput" data-ng-submit="cntrl.submit()" >
<div id="countryAndState" data-ng-controller="SelectCountryController as vm">
<div class="boldHeading">
<p>TEST Language: {{ vm.langKey }} </p>
<p translate>COUNTRY</p>
<select data-ng-model="vm.countrySelected"
data-ng-init="vm.countrySelected = vm.countrySelected || vm.countries[0].code"
data-ng-options="country.code as country.text group by country.continent for country in vm.countries" >
</select>
<p>TEST selected item is : {{vm.countrySelected}}</p>
</div>
<div id="stateProvince">
<div id="stateDiv" data-ng-hide="vm.hideState">
<p class="boldHeading" translate>STATE</p>
<input type="text" id="state" name="state" data-ng-model="cntrl.input.state" size="50" maxlength="50" />
</div>
</div>
</div>
</form>
</div>
Angular/Javascript for the interior SelectCountryController
(function() { 'use strict';
angular.module( 'residenceApp' ).controller( 'SelectCountryController', SelectCountryController ); //end of controller module
SelectCountryController.$inject = [ '$translate', 'selectCountryTranslateFactory', '$timeout' ];
function SelectCountryController( $translate, selectCountryTranslateFactory, $timeout ) {
var vm = this;
vm.langKey = {};
vm.hideState = false;
vm.countries = countries();
vm.hideState = hideStateSelector();
function countries() {
vm.langKey = $translate.use(); //use() as a getter
return selectCountryTranslateFactory.withLangChoice( vm.langKey );
}
function hideStateSelector() {
var countriesWithNoStates =[ "AI", "AG", "AW", "BS", "BB", "BM" ];
if( countriesWithNoStates.indexOf( vm.countrySelected ) > -1 ) {
$timeout(function() {
vm.hideState = true;
angular.element('stateDiv').trigger('click');
return vm.hideState;
}, 10); //end of $timeout
}
} //end of hideStateSelector function
} //end of controller function
})();
如果它有任何区别,所有这些都是部分视图。
莱尔德先生和我提出了解决方案,这是使用"this"和$scope更新视图的实现。
(function(angular) {
'use strict';
angular.module( 'residenceApp' ).controller( 'SelectCountryController', SelectCountryController ); //end of controller module
SelectCountryController.$inject = ['$rootScope', '$translate', '$timeout', 'selectCountryTranslateFactory'];
function SelectCountryController($scope, $translate, $timeout, selectCountryTranslateFactory) {
var vm = this;
vm.langKey = {};
vm.hideState = false;
vm.countries = countries();
$scope.countrySelected = '';
function countries() {
vm.langKey = $translate.use(); //use() as a getter
return selectCountryTranslateFactory.withLangChoice( vm.langKey );
}
function hideStateSelector(countrySelected) {
var countriesWithNoStates =[ "AI", "AG", "AW", "BS", "BB", "BM" ];
if( countriesWithNoStates.indexOf( countrySelected ) !== -1 ) {
$timeout(function() {
vm.hideState = true;
}, 0 );
} else {
vm.hideState = false;
}
} //end of hideStateSelector function
$scope.$watch('vm.countrySelected', function (newValue, oldValue) {
hideStateSelector(countrySelected);
});
}
})(window.angular);
相关文章:
- 基于单选框更新页眉,选中并选择输入文本
- 我想在选择输入文件上显示图像
- 指令中选择输入的双向绑定不起作用
- 调整从选择输入中获取数据并将其放入 DIV 的 jQuery 代码
- JS根据类型和名称选择输入
- jQuery使用这个获取任何选择输入的name属性
- 无法检索从窗口.本地存储中选择输入值
- 使用Javascript与选择输入交互
- 在Meteor中加载带有采集数据的选择输入字段
- 使用 jquery 控制两个选择输入的组合值
- JavaScript 中的 if 语句,用于从选择输入中获取值
- 用文本输入填充选择输入
- 我无法使用jquery选择输入的值
- 如何在选择“输入颜色”后从中获取新的颜色值
- 如何添加单选按钮和复选框将选择输入到一起以形成JavaScript输出
- jQuery;Ajax-在页面加载时将项目加载到选择输入
- JQuery 验证器不适用于选择输入
- 如何使用 Reactjs 选择输入中的所有文本,当它聚焦时
- Angularjs:如何在页面加载时预先选择输入文本字段
- Jquery 不能在表单内选择输入元素,但在表单外部选择输入元素