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

prz*_*zno 9 angularjs

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

<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>
Run Code Online (Sandbox Code Playgroud)

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'
        }];
    }]);
Run Code Online (Sandbox Code Playgroud)

mic*_*ael 25

您可以格式化选项文本:

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

编辑

如果你想&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;
};
Run Code Online (Sandbox Code Playgroud)

在您的HTML中它将是:

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

这是有效的,因为我们在字符串而不是实体中连接&nbsp;(例如&#160;)的unicode字符,因此没有什么可以逃脱的element.text()功能.