2017-04-26 34 views
1

角开关我想,当声明,我的角模板和switch语句输出必须是“你是一个用户”做一个简单的开关,但它说,我是一个客人。不工作时

我的代码有什么问题?

<p><strong>Current role</strong></p> 
<p>{{ app.currentUser.role }}</p> 
<p><strong>Role to compare with</strong></p> 
<p>{{ app.userRoles.user }}</p> 

输出:

Current role 
user 

Role to compare with 
user 

switch语句

<div ng-switch on="app.currentUser.role"> 
    <div ng-switch-when="app.userRoles.admin">You're admin.</div> 
    <div ng-switch-when="app.userRoles.moderator">You're moderator.</div> 
    <div ng-switch-when="app.userRoles.user">You're a user.</div> 
    <div ng-switch-default>You're a guest.</div> 
</div> 

输出:

You're a guest. 

角控制器:

function MainController() { 
    my = this; 

    my.currentUser = { role : 'user'}; 
    my.userRoles = { user : 'user' }; 

    } 

Plunker链接: https://plnkr.co/edit/oCKVTjfTwkwYO9UVQU6X?p=preview

回答

2

按照文档的ngSwitch

要知道,来匹配无法表达的属性值。它们被解释为文字串值以匹配。例如,ng-switch-when="someVal"将与字符串"someVal"匹配,而不是针对表达式$scope.someVal的值。

看起来你不能像目前那样匹配app.userRoles.**。如果你使用类似的东西:

<div ng-switch-when="user">You're a user.</div> 

你应该得到想要的结果。

来源:https://docs.angularjs.org/api/ng/directive/ngSwitch

2

您的模板应该像下面,

<div ng-switch on="app.currentUser.role"> 
    <div ng-switch-when="admin">You're admin.</div> 
    <div ng-switch-when="moderator">You're moderator.</div> 
    <div ng-switch-when="user">You're a user.</div> 
    <div ng-switch-default>You're a guest.</div> 
</div> 
0

你不需要使用任何switch语句。

<div ng-if="app.currentUser.role"> 
    <div>You're {{app.currentUser.role}}.</div> 
</div> 

<div ng-if="!app.currentUser.role"> 
    <div>You're a guest.</div> 
</div>