选择的选项不适用于 AngularJS 模板
option selected not working from AngularJS template
我是 AngularJS 的新手,所以它可能非常简单,但我似乎无法理解。问题不在 AngularJS 代码本身,但我确定它以某种方式连接,因为我已经在空白 pure-HTML 测试页中尝试过它,并且它有效,它应该如何工作。
headers.html:
<table>
<thead>
<tr>
<td colspan="2" align="right">
Sort headers by:
<select ng-model="sortHeaders">
<option value="rating">Rating</option>
<option value="id" selected>ID</option>
</select>
</td>
</tr>
<tr>
<th>Rating</th>
<th>Header</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="header in headers | filter:search | orderBy:sortHeaders">
<td>{{header.rating}}</td>
<td>{{header.title}}</td>
</tr>
</tbody>
这里的问题是,正如标题所说,<option value="id" selected>
在页面加载时没有被选中,这是应该的。
headers.html 显然是数据输出的模板。除了这个 selected
问题外,它完美地完成了工作。
加载自headers_app.js:
var headersApp = angular.module('headersApp', []);
headersApp.directive('headers', [function () {
return {
restrict: 'E',
controller: function($scope, $http) {
$http.get('/api/headers.json').success(function(data) {
$scope.headers = data.headers;
});
},
templateUrl: '/templates/headers.html',
replace: true,
link: function (scope, element, attrs) {
console.log('linked headersApp');
}
};
}]);
当然里面还有这个人index.html:
...
<headers>
</headers>
...
再一次,其他一切都按预期工作。唯一的问题是 supposed-to-be-selected 选项在页面加载时实际上并未被选中。
有什么想法吗?
link: function (scope, element, attrs) {
scope.sortHeaders = "id";
}
正如其他回复所说,你也可以这样做:
<select ng-model="sortHeaders">
<option value="rating">Rating</option>
<option value="id" ng-selected="true">ID</option>
</select>
查看 angularjs 文档。您可以为此使用 ngSelected。
文档中的示例:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<label>Check me to select: <input type="checkbox" ng-model="selected"></label>
<br/>
<select aria-label="ngSelected demo">
<option>Hello!</option>
<option id="greet" ng-selected="selected">Greetings!</option>
</select>
在 angular 中,您应该使用 ngSelected 指令而不是 selected,如下所示:
<select ng-model="sortHeaders">
<option value="rating">Rating</option>
<option value="id" ng-selected="selected">ID</option>
</select>
所以我通过添加 headers.app
来解决它
$scope.sortBy = ['id','rating'];
并将我的 <select>
块替换为
<select ng-model="sortHeaders">
<option ng-repeat="option in sortBy"
value="{{option}}"
ng-selected="{{option=='id'}}">{{option | uppercase}}</option>
</select>
我没有使用 ng-options
因为在我的例子中它是一维值数组,在这种情况下使用 ng-options
不是必需的,也不是最优雅的(在我看来),解决方案。
感谢你们提供 ng-selected
的链接,发现它们非常有用。
使用
<option ng-selected="true">Select Event Name</option>
作为默认值
在ng-selected
中使用表达式
<OPTION ng-selected="expression">
...
</OPTION>
<select ng-model="selectedid">
<option value="" disabled selected>Seleccione...</option>
<option ng-repeat="item in list"
ng-selected="{{item.Value}} === {{selectedid}}"
value="{{item.Value}}">{{item.Text}}
</option>
</select>
我是 AngularJS 的新手,所以它可能非常简单,但我似乎无法理解。问题不在 AngularJS 代码本身,但我确定它以某种方式连接,因为我已经在空白 pure-HTML 测试页中尝试过它,并且它有效,它应该如何工作。
headers.html:
<table>
<thead>
<tr>
<td colspan="2" align="right">
Sort headers by:
<select ng-model="sortHeaders">
<option value="rating">Rating</option>
<option value="id" selected>ID</option>
</select>
</td>
</tr>
<tr>
<th>Rating</th>
<th>Header</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="header in headers | filter:search | orderBy:sortHeaders">
<td>{{header.rating}}</td>
<td>{{header.title}}</td>
</tr>
</tbody>
这里的问题是,正如标题所说,<option value="id" selected>
在页面加载时没有被选中,这是应该的。
headers.html 显然是数据输出的模板。除了这个 selected
问题外,它完美地完成了工作。
加载自headers_app.js:
var headersApp = angular.module('headersApp', []);
headersApp.directive('headers', [function () {
return {
restrict: 'E',
controller: function($scope, $http) {
$http.get('/api/headers.json').success(function(data) {
$scope.headers = data.headers;
});
},
templateUrl: '/templates/headers.html',
replace: true,
link: function (scope, element, attrs) {
console.log('linked headersApp');
}
};
}]);
当然里面还有这个人index.html:
...
<headers>
</headers>
...
再一次,其他一切都按预期工作。唯一的问题是 supposed-to-be-selected 选项在页面加载时实际上并未被选中。
有什么想法吗?
link: function (scope, element, attrs) {
scope.sortHeaders = "id";
}
正如其他回复所说,你也可以这样做:
<select ng-model="sortHeaders">
<option value="rating">Rating</option>
<option value="id" ng-selected="true">ID</option>
</select>
查看 angularjs 文档。您可以为此使用 ngSelected。
文档中的示例:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<label>Check me to select: <input type="checkbox" ng-model="selected"></label>
<br/>
<select aria-label="ngSelected demo">
<option>Hello!</option>
<option id="greet" ng-selected="selected">Greetings!</option>
</select>
在 angular 中,您应该使用 ngSelected 指令而不是 selected,如下所示:
<select ng-model="sortHeaders">
<option value="rating">Rating</option>
<option value="id" ng-selected="selected">ID</option>
</select>
所以我通过添加 headers.app
来解决它$scope.sortBy = ['id','rating'];
并将我的 <select>
块替换为
<select ng-model="sortHeaders">
<option ng-repeat="option in sortBy"
value="{{option}}"
ng-selected="{{option=='id'}}">{{option | uppercase}}</option>
</select>
我没有使用 ng-options
因为在我的例子中它是一维值数组,在这种情况下使用 ng-options
不是必需的,也不是最优雅的(在我看来),解决方案。
感谢你们提供 ng-selected
的链接,发现它们非常有用。
使用
<option ng-selected="true">Select Event Name</option>
作为默认值
在ng-selected
中使用表达式<OPTION ng-selected="expression">
...
</OPTION>
<select ng-model="selectedid">
<option value="" disabled selected>Seleccione...</option>
<option ng-repeat="item in list"
ng-selected="{{item.Value}} === {{selectedid}}"
value="{{item.Value}}">{{item.Text}}
</option>
</select>