AngularJS:$观察 select 输入
AngularJS: $watch for a select input
我知道我们可以使用 ng-change 来解决这个问题,但我想了解为什么 $watch 在 select 上不起作用。也许我做错了什么,但似乎我不是唯一一个为此苦苦挣扎的人。
这是我的代码:
HTML:
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
Serveur
</div>
<select ng-model="server" ng-options="s as s.label for s in serverschoice">
</select>
</label>
</div>
JS:
.controller('SettingsCtrl', function ($scope, $log, serverSelection) {
//List of servers to connect to
$scope.serverschoice = serverSelection.servers;
$scope.server = serverSelection.server;
$scope.$watch('server', function(NewValue, OldValue) {
serverSelection.server = NewValue;
$scope.url = serverSelection.url;
}, true);
})
.service("serverSelection", function() {
var self = this;
self.servers = [
{ label: 'Production', value: 1, url: 'url1' },
{ label: 'Training', value: 2, url: 'url2' },
{ label: 'Local', value: 3, url: 'url2' }
];
self.server = self.servers[1];
console.log(self.server);
self.url = self.server.url;
})
谢谢...
为了使其正常工作,您需要对代码进行大量更改,您需要将所有与服务器相关的信息放入一个名为 self.serverInfo
的对象中,该对象将包含有关 server
的信息 & servers
直接将其与范围变量绑定将根据 JavaScript 原型继承自动更新绑定。
HTML
<body ng-controller="SettingsCtrl">
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
Server
</div>
{{serverInfo}}
<select ng-model="serverInfo.server"
ng-options="s as s.label for s in serverInfo.servers">
</select>
</label>
</div>
</body>
控制器
var app = angular.module('app',[]);
app.controller('SettingsCtrl', function ($scope, $log, serverSelection) {
//List of servers to connect to
$scope.serverInfo= serverSelection.serverInfo;
$scope.$watch('serverInfo.server', function(NewValue, OldValue) {
$scope.url = $scope.serverInfo.server.url;
}, true);
})
app.service("serverSelection", function() {
var self = this;
self.serverInfo = {};
self.serverInfo.servers = [
{ label: 'Production', value: 1, url: 'url1' },
{ label: 'Training', value: 2, url: 'url2' },
{ label: 'Local', value: 3, url: 'url2' }
];
self.serverInfo.server = self.serverInfo.servers[1];
console.log(self.server);
self.serverInfo.url = self.serverInfo.server.url;
})
我接受@pankajparkar 的回答,但我想展示我的最终代码,因为事实上我已经使用@pankajparkar 提出的正确绑定,我不再需要 $watch。
HTML
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
Serveur
</div>
<select ng-model="serverSelection.server" ng-options="s as s.label for s in serverSelection.servers">
</select>
</label>
</div>
<p>URL: {{serverSelection.server.url}}</p>
JS
.controller('SettingsCtrl', function ($scope, $log, serverSelection) {
//List of servers to connect to
$scope.serverSelection= serverSelection;
})
.service("serverSelection", function() {
var self = this;
self.servers = [
{ label: 'Production', value: 1, url: 'url0' },
{ label: 'Training', value: 2, url: 'url1' },
{ label: 'Local', value: 3, url: 'url2' }
];
self.server = self.servers[1];
})
我知道我们可以使用 ng-change 来解决这个问题,但我想了解为什么 $watch 在 select 上不起作用。也许我做错了什么,但似乎我不是唯一一个为此苦苦挣扎的人。 这是我的代码:
HTML:
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
Serveur
</div>
<select ng-model="server" ng-options="s as s.label for s in serverschoice">
</select>
</label>
</div>
JS:
.controller('SettingsCtrl', function ($scope, $log, serverSelection) {
//List of servers to connect to
$scope.serverschoice = serverSelection.servers;
$scope.server = serverSelection.server;
$scope.$watch('server', function(NewValue, OldValue) {
serverSelection.server = NewValue;
$scope.url = serverSelection.url;
}, true);
})
.service("serverSelection", function() {
var self = this;
self.servers = [
{ label: 'Production', value: 1, url: 'url1' },
{ label: 'Training', value: 2, url: 'url2' },
{ label: 'Local', value: 3, url: 'url2' }
];
self.server = self.servers[1];
console.log(self.server);
self.url = self.server.url;
})
谢谢...
为了使其正常工作,您需要对代码进行大量更改,您需要将所有与服务器相关的信息放入一个名为 self.serverInfo
的对象中,该对象将包含有关 server
的信息 & servers
直接将其与范围变量绑定将根据 JavaScript 原型继承自动更新绑定。
HTML
<body ng-controller="SettingsCtrl">
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
Server
</div>
{{serverInfo}}
<select ng-model="serverInfo.server"
ng-options="s as s.label for s in serverInfo.servers">
</select>
</label>
</div>
</body>
控制器
var app = angular.module('app',[]);
app.controller('SettingsCtrl', function ($scope, $log, serverSelection) {
//List of servers to connect to
$scope.serverInfo= serverSelection.serverInfo;
$scope.$watch('serverInfo.server', function(NewValue, OldValue) {
$scope.url = $scope.serverInfo.server.url;
}, true);
})
app.service("serverSelection", function() {
var self = this;
self.serverInfo = {};
self.serverInfo.servers = [
{ label: 'Production', value: 1, url: 'url1' },
{ label: 'Training', value: 2, url: 'url2' },
{ label: 'Local', value: 3, url: 'url2' }
];
self.serverInfo.server = self.serverInfo.servers[1];
console.log(self.server);
self.serverInfo.url = self.serverInfo.server.url;
})
我接受@pankajparkar 的回答,但我想展示我的最终代码,因为事实上我已经使用@pankajparkar 提出的正确绑定,我不再需要 $watch。
HTML
<div class="list">
<label class="item item-input item-select">
<div class="input-label">
Serveur
</div>
<select ng-model="serverSelection.server" ng-options="s as s.label for s in serverSelection.servers">
</select>
</label>
</div>
<p>URL: {{serverSelection.server.url}}</p>
JS
.controller('SettingsCtrl', function ($scope, $log, serverSelection) {
//List of servers to connect to
$scope.serverSelection= serverSelection;
})
.service("serverSelection", function() {
var self = this;
self.servers = [
{ label: 'Production', value: 1, url: 'url0' },
{ label: 'Training', value: 2, url: 'url1' },
{ label: 'Local', value: 3, url: 'url2' }
];
self.server = self.servers[1];
})