2013-06-21 25 views
4

我必须使用指令ng-required,但我不能硬编码true或false。我需要在变量中使用它,但角度不能识别“真实”。AngularJS ng-要求不能使用变量

jsFiddle example

<div ng-app ng-init="test=true"> 
    <div> 
     both have ng-required="true" 
     <br/> 
     one as hardcoded string literal, one via a variable 
     <br/> 
     Inspect them, one is not required! 
    </div> 
    <form name="myForm"> 
     <input type="text" ng-required="{{test}}" /> 
     <input type="text" ng-required="true" /> 
    </form> 
</div> 

我怎样才能得到这个工作?

回答

12
<input type="text" ng-required="{{test}}" /> 

你不需要插值测试这里。既然你想评估测试的价值,只需删除大括号,它应该工作。

+0

我明白了。 ng-required指令试图直接访问由给定字符串文字命名的作用域中的变量。一旦它将{{test}}评估为“true”,它就会尝试查找scope.true,而且这是未定义的。未定义不是==真,所以它不是必需的。感谢那! – maklemenz

+1

插值的结果总是一个字符串。 –

+0

@JM。你是那个人! –

5

就在昨天,你可以用NG-需要在相同的模式,NG级发现:

<input type = "text" ng-required = "{true : 'true', false : 'false'}[test]" /> 
+0

我尝试了ng-required =“{true:'true',false:'false'} [test]”,但我好奇为什么ng-required =“{{test}}”不起作用? – Yoo

+0

@Yoo在Angular指令中,你不必用双括号{{}}来包装你的表达式,因为它已经完成了。你必须在非角度参数上使用它,例如'name','class','id'... – Alex

0

出于某种原因,这两个答案不工作,只使用

ng-required="expired" 

过期成为一个变量。

+0

接受的说法完全一样。请仔细阅读。 – maklemenz

1

就我个人而言,我使用三元运算符来处理这些类型的指令,它运行良好。对于NG-要求:

<input type="text" ng-required="(user.name == '' ? 'true' : 'false')" ng-model="user.nickname"/> 

在这个例子中,如果没有填写用户名领域,绰号场成为必需。

+0

你能解释为什么'ng-required =“user.name ==''”'是不够的吗? – noisy

相关问题