评估包含表达式的表达式
Evaluating an expression which contains an expression
我是 Angular js 的新手,我刚开始用 Angular JS 做一个项目。
让我简要介绍一下我的申请。我有一个 json 数据,其中包含一些节点的数据,这些节点形成了一个层次结构。我用来显示这些数据。所以它会一次取一个节点,根据里面的数据显示。我需要根据数据显示一个 select 字段。
一切正常,直到我需要显示错误消息,如果用户没有 select 字段中的值。它应该显示在该特定节点上。为此,我应该识别每个节点(因为这是一个模板)。我将数据中的 id 映射为 select 标签的名称,根据需要制作标签并编写了一个显示错误消息的 span。
这个跨度会根据条件显示
$error.required
.
代码片段如下
<form class='css-form form-search' name="myForm" novalidate>
......
<script type="text/ng-template" id="mynodetemplate">
........
<select name="{{node.id}}" ng-model="node.attributeId" ng-options="attribute.id as attribute.name for attribute in attributes" ng-show ="node.showData" required>
<option value="">Select an Attribute</option>
</select>
<span ng-show=”myForm.node.id.$error.required" style="text-align:center; color:red">Please select</span>
'''''''
</script>
..........
<div ui-tree id="tree-root">
<ol ui-tree-nodes ng-model="nodes">
<li ng-repeat="node in nodes” ui-tree-node ng-include="mynodetemplate”></li>
</ol>
</div>
........
但我无法在这里给出正确的表达-
ng-show=”myForm.node.id.$error.required”
我已经尝试了很多方法来评估正确的表达式,但它不起作用。
感谢任何帮助。
提前致谢。
就像在JavaScript中一样,如果你想让一个对象属性的名称是node.id
,你不能只写
object.node.id
因为它引用了对象的属性 node
的属性 id
。所以你被迫使用
object['node.id']
所以你的表情应该是
ng-show="myForm['node.id'].$error.required"
但我同意 charlieftl 的评论。选择一个包含点的名称会让您的生活变得困难。只需重命名nodeId
,即可使用
ng-show="myForm.nodeId.$error.required"
编辑:
该名称现在实际上是一个动态名称。所以,在 JavaScript 你会使用
object[node.id]
在表达式中,由于范围是隐式的,您将使用
ng-show="myForm[node.id].$error.required"
我已经使用了发布的解决方案 here
我所做的是,我将只检查模态中是否存在值,或者它的长度。
答案的示例片段如下
<input ng-model="somefield">
<span ng-show="!somefield.length">Please enter something!</span>
<span ng-show="somefield.length">Good boy!</span>
感谢@Supr 的回答。
我不知道为什么表单验证不起作用:(
我是 Angular js 的新手,我刚开始用 Angular JS 做一个项目。 让我简要介绍一下我的申请。我有一个 json 数据,其中包含一些节点的数据,这些节点形成了一个层次结构。我用来显示这些数据。所以它会一次取一个节点,根据里面的数据显示。我需要根据数据显示一个 select 字段。
一切正常,直到我需要显示错误消息,如果用户没有 select 字段中的值。它应该显示在该特定节点上。为此,我应该识别每个节点(因为这是一个模板)。我将数据中的 id 映射为 select 标签的名称,根据需要制作标签并编写了一个显示错误消息的 span。
这个跨度会根据条件显示
$error.required
.
代码片段如下
<form class='css-form form-search' name="myForm" novalidate>
......
<script type="text/ng-template" id="mynodetemplate">
........
<select name="{{node.id}}" ng-model="node.attributeId" ng-options="attribute.id as attribute.name for attribute in attributes" ng-show ="node.showData" required>
<option value="">Select an Attribute</option>
</select>
<span ng-show=”myForm.node.id.$error.required" style="text-align:center; color:red">Please select</span>
'''''''
</script>
..........
<div ui-tree id="tree-root">
<ol ui-tree-nodes ng-model="nodes">
<li ng-repeat="node in nodes” ui-tree-node ng-include="mynodetemplate”></li>
</ol>
</div>
........
但我无法在这里给出正确的表达- ng-show=”myForm.node.id.$error.required”
我已经尝试了很多方法来评估正确的表达式,但它不起作用。
感谢任何帮助。
提前致谢。
就像在JavaScript中一样,如果你想让一个对象属性的名称是node.id
,你不能只写
object.node.id
因为它引用了对象的属性 node
的属性 id
。所以你被迫使用
object['node.id']
所以你的表情应该是
ng-show="myForm['node.id'].$error.required"
但我同意 charlieftl 的评论。选择一个包含点的名称会让您的生活变得困难。只需重命名nodeId
,即可使用
ng-show="myForm.nodeId.$error.required"
编辑:
该名称现在实际上是一个动态名称。所以,在 JavaScript 你会使用
object[node.id]
在表达式中,由于范围是隐式的,您将使用
ng-show="myForm[node.id].$error.required"
我已经使用了发布的解决方案 here
我所做的是,我将只检查模态中是否存在值,或者它的长度。
答案的示例片段如下
<input ng-model="somefield">
<span ng-show="!somefield.length">Please enter something!</span>
<span ng-show="somefield.length">Good boy!</span>
感谢@Supr 的回答。
我不知道为什么表单验证不起作用:(