带有静态链接选项的ng-option

时间:2014-10-17 10:38:11

标签: javascript angularjs

如何使用ng-options添加表示指向其他页面的链接的静态选项。

<select class="form-control"
        ng-model="person"
        ng-options="person.name for person in persons">
</select>

我正在使用带有ng-options的select元素和预定义的人员列表,其中person是一个对象。我尝试使用ng-repeat,但这种方法不起作用:

<select ng-model="person" onChange = "window.location.href=this.value">
    <option value="#/home">Anywhere</option>
    <option value="#/current" ng-repeat="person in persons">{{person.name}}</option>
</select>

Varibale $ scope.person获取值“#/ current”。在这种情况下,链接工作,但ng模型失败。变量$ scope.person应代表所选人员。

我期待的是$ scope.person选择了值,除非用户选择“Anywhere”,在这种情况下,他应该被重定向到另一个页面。

“#/ home”和“#/ current”代表网址位置。 “#/ home”是主页,“#/ current”是当前页面。 onChange事件将用户重定向到主页或重新加载当前页面。

因此,当用户选择“Anywhere”时,他应该被重定向到主页。对于任何其他选项,用户页面将不会更改。

2 个答案:

答案 0 :(得分:2)

首先,你不应该混合原生的js和angularjs,除非你知道究竟发生了什么。

使用ng-change而不是onchange并检查值是否为&#39; Anywhere&#39;。如果是路线,否则什么都不做。在您的方法中,您在两种情况下都会重定向。

<select ng-model="person" ng-change="selectHandler()">
    <option value="">Anywhere</option>
    <option value="{{prsn}}" ng-repeat="prsn in persons">
        {{prsn.name}}
    </option>
</select>

$scope.selectHandler = function(){
    if($scope.person == ''){
        console.log("route to /home");
        //ROUTE WITH $location.path
    }
}

这是一个适用于演示的 FIDDLE

答案 1 :(得分:0)

在你的ng-repeat试试中,你写道:

ng-model="person"

不存在(因为你做了ng-repeat =&#34;人在人和#34;)

尝试

ng-model="persons"