评估包含表达式的表达式

时间:2015-05-07 12:15:48

标签: angularjs expression

我是 Angular js 的新手,我刚开始在Angular JS做一个项目。 让我简单介绍一下我的申请。我有一个json数据,其中包含一些节点的数据,这些节点构成一个层次结构。我用来显示这些数据。因此,它将一次占用一个节点并根据其中的数据进行显示。我需要根据数据显示一个选择字段。

如果用户未在字段中选择值,则在我需要显示错误消息之前,一切正常。它应该显示在该特定节点上。为此,我应该识别每个节点(,因为这是一个模板)。我将数据中的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”

我已经尝试了很多方法来评估正确的表达方式,但它没有用。

任何帮助表示感谢。

提前致谢。

2 个答案:

答案 0 :(得分:0)

就像在JavaScript中一样,如果您希望对象属性的名称为node.id,则不能只写

object.node.id

因为它引用了对象的属性id的属性node。所以你被迫使用

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"

答案 1 :(得分:0)

我使用了here

发布的解决方案

我所做的是,我将检查模态中是否存在值或其长度。

答案中的示例摘录如下

<input ng-model="somefield">
<span ng-show="!somefield.length">Please enter something!</span>
<span ng-show="somefield.length">Good boy!</span>

感谢@Supr的回答。

我不知道为什么表单验证不起作用:(