2014-01-30 2 views
5

У меня есть следующий снимок с использованием угловых символов.Вызов href из выпадающего списка в angularjs

<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(), кажется, не имеют никакого эффекта ИНТА скрипки поэтому вместо пути просто отображается на странице, но она должна работайте в ожидании иначе.


С вашим подходом существует ряд ошибок. Прежде всего вы используете ng-repeat на элементе опции, поэтому name.id не будет доступен за пределами этого элемента. Вероятно, это будет undefined, когда вы используете его в ng-href (если только вы не определили его в области $parent, но если я правильно понимаю, это не так).

+0

Я не могу заставить это работать. См. [Обновленная скрипка] (http://jsfiddle.net/GruffBunny/C3Adv/15/) –

+0

Можете ли вы уточнить? Я вижу много абзацев, добавленных в html, но никаких других изменений. $ location.path() не влияет на скрипт - это точно. Я предполагаю, что это должно быть связано с некоторыми ограничениями, налагаемыми самой скрипкой. Если я возьму код из обновленной скрипки и вставлю его в новый контроллер в новом проекте (сгенерированный с помощью yoman), тогда он будет работать. Путь меняется на все, что я выбираю. Путь должен быть действительным, поэтому я также настроил новый маршрут/edit /: id в app.js. – user2847643

+0

При выборе a1 в выпадающем списке он не прокручивается до абзаца с идентификатором 1. Не думайте, что это проблема со скрипкой, все, что я сделал, это включить дополнительные абзацы, чтобы показать, что они не прокручиваются до требуемого места. NB url вопроса относится к фрагменту (#/edit/...). –

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 в контроллер.

Смежные вопросы