从angularjs中的下拉列表调用href

从angularjs中的下拉列表调用href,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我使用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> </se

我使用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中实现这一点。

select语句对我来说有点过于复杂,并且包含一些错误。请尝试以下更简单的版本:

   <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>
<select ng-model='adda'
        ng-options='as_number for name in addas' 
        ng-change='scrollToName()'>  
</select>
不要忘记将$location和$anchorScroll注入控制器

$location.path在小提琴中似乎没有任何效果,因此该路径只显示在页面上,但如果不是这样,它应该可以正常工作


你的方法有很多问题。首先,在option元素上使用ng repeat,以便name.id在该元素之外不可用。如果您在ng href中使用它,它可能是未定义的,除非您在$parent作用域中也定义了它,但如果我理解正确,这是不正确的。

我无法让它工作。你能说得更具体些吗?我看到html中添加了很多段落,但没有其他变化$location.path在小提琴内部没有效果-这是肯定的。我猜这一定是由于小提琴本身施加的一些限制。如果我从您更新的fiddle中获取代码,并将其粘贴到使用yeoman生成的新项目中的新控制器中,那么它就可以工作了。路径正在更改为我选择的任何路径。路径必须有效,因此我还在app.js中配置了一个新的route/edit/:id。在下拉列表中选择a1时,它不会滚动到id为1的段落。不要认为这是小提琴的问题,我所做的只是添加了额外的段落,以显示它没有滚动到所需的位置。注意,问题url是指向片段/编辑/…我的理解是,问题是如何以简单的方式操作路径。如果您只想更改hash片段,那么您确实应该使用$location.hash而不是$location.path。我担心,在这种情况下,如果我创建一个简单的演示,它在本地工作,但在小提琴中不工作。内部状态正在更改-获取路径或散列后返回新值。这可能被认为是一个严重的错误在角度。。。但它在本地有效!因此,小提琴的问题。
<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);
    }
}