2014-01-30 35 views
5

我使用angularjs下面的下拉列表。從angularjs下拉式調用href

<select ng-href="#/edit/{{name.id}}" class="form-control" id="{{name.id}}"> 
    <option ng-repeat="name in addas | filter:cc" 
    id="{{name.id}}" value="{{name.name}}">{{name.as_number}}</option> 
    </select> 

我想在下拉菜單中的選定選項中調用href。下拉填充很好。當我選擇任何選項時,它不會執行任何操作或調用url。 請讓我知道如何在angularjs中實現這一點。

回答

4

工作的jsfiddle:http://jsfiddle.net/C3Adv/3/

<select ng-model="adda" ng-options="a.name for a in addas" ng-change="onChange()"> 
</select> 

樣品控制器:

function Ctrl($scope, $location) { 
    $scope.addas = [ 
     {id: 1, name: 'a1', as_number: 1}, 
     {id: 2, name: 'a2', as_number: 2}, 
     {id: 3, name: 'a3', as_number: 3} 
    ]; 

    $scope.onChange = function() { 
     $location.path('/edit/' + $scope.adda.id); 
    } 
} 

$location.path()似乎不具有INT小提琴任何作用,因此取而代之的是剛剛頁面上顯示的路徑,但它應該否則按預期工作。


你的方法有很多錯誤。首先,您在選項元素上使用ng-repeat,因此name.id將不在該元素之外。當您在ng-href中使用它時,它可能是undefined(除非您在$parent範圍內定義了該範圍,但如果我理解正確,則不是這樣)。

+0

我無法得到這個工作。看[更新的小提琴](http://jsfiddle.net/GruffBunny/C3Adv/15/) –

+0

你能更具體嗎?我看到很多段落添加到HTML但沒有其他更改。 $ location.path()在小提琴裏面沒有任何效果 - 這是肯定的。我猜想這一定是由於小提琴本身所施加的一些限制。如果我從更新的小提琴中獲取代碼並將其粘貼到全新控制器中(由yeoman生成),那麼它就可以工作。路徑正在改變爲我選擇的任何東西。路徑需要有效,所以我還在app.js中配置了一個新的route/edit /:id。 – user2847643

+0

在下拉列表中選擇a1時,它不會滾動到id爲1的段落。不要認爲這是小提琴的問題,我所做的只是包含多餘的段落以顯示它不滾動到所需的位置。注意問題的URL是一個片段(#/編輯/ ...)。 –

2

select語句對我而言看起來有些複雜,並且包含一些錯誤。試試這個簡單的版本:

<select ng-model='adda' 
     ng-options='as_number for name in addas' 
     ng-change='scrollToName()'> 
</select> 

控制器:

$scope.scrollToName = function(){ 
    $location.hash($scope.adda.id); 
    $anchorScroll() 
}; 

不要忘記注入$location$anchorScroll到控制器。