У меня есть код в моем контроллере
$scope.currencies = [
{ "currency_code": "USD", "currency_name": "American Dollar" },
{ "currency_code": "AUD", "currency_name": "Australian Dollar" },
{ "currency_code": "BRL", "currency_name": "Brazilian Real" },
{ "currency_code": "CAD", "currency_name": "Canadian Dollar" },
{ "currency_code": "CHF", "currency_name": "Swiss Franc" },
{ "currency_code": "CLP", "currency_name": "Chilean Peso" }
]
$scope.selectedCurrency = "USD";
$scope.doStuffs = function(){
alert($scope.selectedCurrency);
}
И в моем представлении
<div class="selected_currency">{{selectedCurrency}}</div>
<select id="currency" name="currency" ng-model="selectedCurrency"
ng-options="currency.currency_code as currency.currency_code for currency in currencies">
</select>
проблема
Когда я меняю валюту на выбор и выполняю doStuffs()
, она предупреждает значение по умолчанию USD
, selectedCurrency
doStuffs()
не принимает измененное значение.
Однако выражение {{selectedCurrency}}
работает очень хорошо.
Может ли кто-нибудь сказать мне, как обновить модель при изменении значений?
благодаря
ОБНОВИТЬ
Это не сработало
<ion-view view-title="My Stuffs" ng-controller="MyCtrl">
<ion-content>
<!-- other tags -->
</ion-content>
</ion-view>
Однако после выполнения кода (я только что определил директиву ng-controller
в теге с ion-content
)
<ion-view view-title="My Stuffs">
<ion-content ng-controller="MyCtrl">
<!-- other tags -->
</ion-content>
</ion-view>
Двухсторонняя привязка работает в угловом режиме, когда значения обновляются по ссылке. В вашем примере selectedCurrency
модельCurrency является примитивной string
в javascript и никогда не будет обновляться через refernce, и изменение значения не будет работать в двух направлениях.
Чтобы заставить его работать, привяжите модель к атрибуту объекта:
контроллер
$scope.model.selectedCurrency = 'USD';
HTML
ng-model="model.selectedCurrency"
Чтобы обновить или изменить значение внутри вашего контроллера, вам нужно написать функцию ng-change на нем
<select id="currency" name="currency" ng-model="selectedCurrency" ng-change="doStuffs()" ng-options="currency.currency_code as currency.currency_code
for currency in currencies">
</select>
Код
$scope.doStuffs = function(){
console.log($scope.selectedCurrency);}
Просто добавьте ng-change="doStuffs()"
в элемент select
<select
id="currency"
name="currency"
ng-model="selectedCurrency"
ng-change="doStuffs()"
ng-options="currency.currency_code as currency.currency_code
for currency in currencies">
</select>
Пожалуйста, демо здесь https://plnkr.co/edit/1gueFbhKkRrqmRiSoTYB?p=preview
$scope.doStuffs
?doStuffs
? Работает нормально: jsfiddle.net/rayon_1990/L3grpLo9