使用ng-options </select>为<select>添加空间

时间:2014-01-23 09:22:02

标签: angularjs

如何使用Angular ng-options将前导空格添加到<select>选项中?

<div ng-controller="MyCntrl">
    Static values (works)
    <select>
        <option value="black">black</option>
        <option value="white">&nbsp;white</option>
        <option value="red">&nbsp;&nbsp;red</option>
        <option value="blue">&nbsp;&nbsp;&nbsp;blue</option>
        <option value="yellow">&nbsp;&nbsp;&nbsp;&nbsp;yellow</option>
    </select>

    Values from JS using angular (only the first-default works)
    <select ng-model="color" ng-options="c.name for c in colors">
        <option value="">&nbsp;&nbsp;&nbsp;default</option>
    </select>
</div>

JS:

    angular.module("myApp", []).
    controller("MyCntrl", ['$scope', function ($scope) {
        $scope.colors = [{
            name: 'black',
            shade: 'dark'
        }, {
            name: '&nbsp;white',
            shade: 'light'
        }, {
            name: '&nbsp;&nbsp;red',
            shade: 'dark'
        }, {
            name: '&nbsp;&nbsp;&nbsp;blue',
            shade: 'dark'
        }, {
            name: '       yellow', // spaces here
            shade: 'light'
        }];
    }]);

1 个答案:

答案 0 :(得分:24)

您可以格式化选项文字:

<select ng-model="color" ng-options="('&nbsp;'+c.name) for c in colors">
    <option value="">&nbsp;default</option>
</select>

修改

如果你想动态生成&nbsp;,那就有点复杂了。假设您的控制器中有一个函数知道要添加多少&nbsp;,那么您可以像这样编写这个函数:

$scope.addSpaces= function(color){
    var count = 1;// put your logic here
    var result = "";
    for(var i=0; i<count; i++){
        result+= String.fromCharCode(160);
    }
    return result;
};
你的HTML中的

将是:

<select ng-model="color" ng-options="(addSpaces(c)+c.name) for c in colors">
    <option value="">&nbsp;default</option>
</select>

这是有效的,因为我们在字符串中连接&nbsp;(例如&#160;)的unicode字符而不是实体,因此element.text()函数没有任何东西可以逃脱。