Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用手动选项进行选择_Javascript_Angularjs - Fatal编程技术网

Javascript 使用手动选项进行选择

Javascript 使用手动选项进行选择,javascript,angularjs,Javascript,Angularjs,我们的应用程序中有一些下拉列表,我们可以不使用ng选项,因为我们需要在标签上设置title属性,这在ng选项中是不可能的 我们需要标题的原因是因为IE

我们的应用程序中有一些下拉列表,我们可以不使用ng选项,因为我们需要在标签上设置title属性,这在ng选项中是不可能的

我们需要标题的原因是因为IE<9删掉了太长的值,并且这些值只有在标题下才可见(显示在元素的悬停处)

现在,为了了解我的问题,请看下面的JS fiddle

(HTML位)


任何
{{v.name}
{{params.value}}

理想情况下,select会选择“test3”,但您可以看到它被设置为空选项。我理解这是因为ng模型的值不存在于ng选项中,但这是因为我没有定义一个

有没有办法让这样的东西起作用?甚至可以为ng选项生成的选项添加标题,这样我们就可以使用它了

编辑

如下面的答案所述,将提琴更新为。

{{v.name}
<option ng-repeat="v in options" value="{{v.value}}" title="{{v.name}}"
        ng-selected="checkOption(v.value)">{{v.name}}</option>

$scope.checkOption = function(value){
    return($scope.params.value == value);
}
$scope.checkOption=函数(值){ 返回($scope.params.value==value); }


[更新]忘记传递值变量。更新了fiddle and answer。

实际上,只需从所选ng中的表达式中删除大括号,它就会工作:

<option ng-repeat="v in options" 
        value="{{v.value}}" 
        title="{{v.name}}" 
        ng-selected="v.value == params.value">{{v.name}}
</option>
{{v.name}

您可能还想看看我的代码中的select2指令,我在ng change=“changeItem()”上重新计算select title

HTML


选择项
{{selectedId}
{{myTitle}}
app.js

angular.module('myApp', []);

function MyCtrl($scope) {

    $scope.items = [{
        id: 1,
        title: "Icebox"
    }, {
        id: 2,
        title: "Summer"
    }, {
        id: 3,
        title: "Milestone"
    }];

    $scope.changeItem = function() {
        $scope.myTitle = undefined;
        for(var i=0; i<$scope.items.length; i++){
            if($scope.items[i].id == $scope.selectedId){
                $scope.myTitle = $scope.items[i].title;    
            }
        }    
    }    
}
angular.module('myApp',[]);
函数MyCtrl($scope){
$scope.items=[{
id:1,
标题:“冰箱”
}, {
id:2,
标题:“夏天”
}, {
id:3,
标题:“里程碑”
}];
$scope.changeItem=函数(){
$scope.myTitle=未定义;

对于(var i=0;i对于手动选项,您只需要使用
ng model
指令。此
ng model
指令为所选选项提供双向数据绑定

jsfiddle:


苹果
橙色
所选值为{selectedFruit}
函数AppCtrl($scope){
$scope.selectedFruit='1';
}

看看我的答案。
ngSelected
以表达式作为参数。文档页面上的注释不正确。在您的答案中
检查选项(v.value)
是一个字符串,由Angular作为当前作用域中的表达式进行计算。因此表达式很好。接受satchmorun的答案,因为它在技术上更正确。只需去掉{}这将需要一个函数或一个常规==检查。谢谢,虽然Ben,方向正确,也会修复它。@nick.stuart我非常同意。在阅读了satchmorun的答案后,我也有一个doh!片刻。gaahhh!谢谢,就是这样。我已经更新了小提琴,所以它可以工作。它仍然在顶部添加了奇怪的空白,但那是g当选择某样东西时,它会消失。
<div ng-app="myApp" ng-controller="MyCtrl">
    <select ng-options="item.id as item.title for item in items" 
            ng-model="selectedId" ng-change="changeItem()" title="{{myTitle}}">
        <option value="" disabled selected style="display: none;">Select Item</option>                
    </select>
    <div>
        {{selectedId}}        
    </div>
    <div>
        {{myTitle}}        
    </div>
</div>
angular.module('myApp', []);

function MyCtrl($scope) {

    $scope.items = [{
        id: 1,
        title: "Icebox"
    }, {
        id: 2,
        title: "Summer"
    }, {
        id: 3,
        title: "Milestone"
    }];

    $scope.changeItem = function() {
        $scope.myTitle = undefined;
        for(var i=0; i<$scope.items.length; i++){
            if($scope.items[i].id == $scope.selectedId){
                $scope.myTitle = $scope.items[i].title;    
            }
        }    
    }    
}
<body ng-app ng-controller="AppCtrl">
<select ng-model="selectedFruit" >
    <option value ='1'> Apple</option>
     <option value ='2'> Orange</option>
</select>
   Selected value is  {{selectedFruit}}
</body>


function AppCtrl($scope) {     

      $scope.selectedFruit = '1';
}