角度选择与图像

时间:2015-08-18 09:08:39

标签: javascript angularjs select ionic-framework

情况:

我需要在语言选择中插入标志。我在谷歌和StackOverflow上搜索过,但所建立的解决方案对我不起作用。

代码:

在控制器中:

 $scope.language_list = [{'name': 'english', 'url': 'https://raw.githubusercontent.com/stevenrskelton/flag-icon/master/png/16/country-4x3/gb.png'},{'name': 'italian', 'url': 'https://raw.githubusercontent.com/stevenrskelton/flag-icon/master/png/16/country-4x3/it.png'}];

在视图中:

<select ng-model="language_selected">
    <option ng-repeat="language in language_list" data-image="{{language.url}}" >{{language.name}}</option>
</select>

示例:

http://jsfiddle.net/tcVhN/168/

问题:

如何在角度选择中插入图像?

修改

这是解决方案的Plunker,已清理:

http://plnkr.co/edit/hMlNjkDL3l0QKF37pCa0?p=preview

5 个答案:

答案 0 :(得分:10)

作为其他答案,您无法使用<options>添加图片,但您可以使用角度模块ui-select来实现您想要的目标。

这是demo with ui-select with your data

清理代码并获得所需内容。

如果您对搜索框不感兴趣,请将CSS覆盖为

 .select2-search {
      display: none;
 }

DEMO

答案 1 :(得分:4)

答案:

根本不可能。

<option>标记的允许内容是包含最终转义字符的文字(例如&eacute;)。 HTML不允许。

有关详细信息,请参阅the docs

解决方案:

使用CSS和HTML制作自定义下拉列表。

答案 2 :(得分:4)

使用原生选择元素

是不可能的

因此,您需要使用其他html元素设计一个选择框。 CSS,

试试这个:

&#13;
&#13;
var app = angular.module('app',[]);

//app.directive('appDirective', function() {});
//app.factory('appService', function() {});

function AppCtrl($scope) {
	$scope.obj={language_selected : {'name':'Choose a language'}};
    $scope.language_list = [{'name': 'english', 'url': 'https://raw.githubusercontent.com/stevenrskelton/flag-icon/master/png/16/country-4x3/gb.png'},{'name': 'italian', 'url': 'https://raw.githubusercontent.com/stevenrskelton/flag-icon/master/png/16/country-4x3/it.png'}];
    
}
&#13;
.select_list{
    background-color: #fff;
    border: 1px solid #b3b3b3;
    cursor: pointer;
    height: 21px;
    line-height: 21px;
    padding: 3px 5px;
    position: relative;
    vertical-align: middle;
    width: 250px;
}
.select_list:after{
    content:"▼";
    position:absolute;
    right:3px;
    color:#b3b3b3;
}
.select_list > .options{
    display:none;
    position:absolute;
    top:100%;
    left:-1px;
    width:100%;
    border:1px solid #666;
    padding:0;
    margin:0;
}

.select_list.active > .options{
    display:block;
}

.select_list > span, .select_list > .options li {
    background-position: 5px center;
    background-repeat: no-repeat;
    padding-left: 30px;
    list-style:none;
}

.select_list > .options li:hover {
    background-color:#eee;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>
<div ng-app="app"  ng-controller="AppCtrl">
<div class="select_list" ng-class='{active:active}' ng-click="active=!active">
    <span ng-style="{'background-image':'url('+obj.language_selected.url+')'}">{{obj.language_selected.name}}</span>
    <ul class="options">
        <li class="select_list_option" ng-repeat="language in language_list" ng-click="obj.language_selected=language" ng-style="{'background-image':'url('+language.url+')'}">{{language.name}}</li>
        </ul>
</div>
</div>
&#13;
&#13;
&#13;

答案 3 :(得分:3)

这不可能,如<option> only supports text

您可能需要使用复杂的HTML / CSS / JavaScript滚动自己的下拉控件。怎么做可能也可能不在你的问题范围内。

或者,您可以使用非重复background-image并在文本上应用一些填充以实现类似的效果。但是,如果每个<option>都有一个唯一的图片,那么您的代码将被每个style的{​​{1}}属性污染。如果你不介意,那很好。否则,以某种方式滚动自己。

参考:Adding images with option tag

答案 4 :(得分:1)

您可以生成css类(从语言名称或仅为其添加新值),而不是插入图像,并将图像作为背景图像添加到css中(使用精灵)。

<select ng-model="language_selected">
    <option ng-repeat="language in language_list" ng-class="{{ language.name }}" >{{ language.name }}</option>
</select>

对于css精灵,我通常使用sass with compass