AngularJS - 获取字段的标签文本

时间:2015-04-17 13:33:03

标签: angularjs forms angularjs-scope labels

问题

我想知道AngularJS"最佳实践"获得字段标签的方法是。使用jQuery,您只需使用"标签查询"查询然后提取文本。虽然使用AngularJS可以这样做,但有些事情并不合适。

假设您的HTML中包含以下内容:

<form name="MyForm" ng-controller="Ctrl">
    <label for="MyField">My spoon is too big:</label>
    <input type="text" size="40" id="MyField" ng-model="myField" />

    <br /><br />

    You entered {{ myField }} for {{ myField.label }}
</form>

控制器内部非常简单:

$scope.myField = 'I am a banana.';

基本上我想在输出中填充myField.label&#34; 我的勺子太大了。&#34;

我现在正在做什么

我现在所做的就是执行一个查询,提取类似于jQuery方法的数据($("label[for='MyField']"))。然后,如果那不存在,我只是拉出占位符文本。它有效,但似乎有点开销。

我想要完成的事情

我想要一些自定义表单验证,我想在邮件中包含标签。我只需要拉标签文本,这样我就可以非常通用地编写它,然后不必担心人们在游戏后期动态切换i18n数据。

小提琴

根据建议的解决方案: https://jsfiddle.net/rcy63v7t/7/

3 个答案:

答案 0 :(得分:10)

您将HTML更改为以下内容:

<label for="MyField">{{ myFieldLabel }}</label>
<input type="text" size="40" id="MyField" ng-model="myField" />

和您的JS到以下内容:

$scope.myFieldLabel = 'My spoon is too big:';

然后,您可以轻松获取/设置其值:

if ($scope.myFieldLabel === 'My spoon is too big:') {
    $scope.myFieldLabel = 'New label:';
}

请注意,新的AngularJS最佳实践要求始终在字段引用中使用“点”。如果你做了类似的事情,它将非常适合:

<label for="MyField">{{ myField.label }}</label>
<input type="text" size="40" id="MyField" ng-model="myField.value" />

和JS:

$scope.myField = {
    value: '',
    label: 'My spoon is too big:'
};

然后,您随时可以轻松访问$scope.myField.label$scope.myField.value

答案 1 :(得分:3)

假设您的控制器中有一个范围变量,如

$scope.myField = {};
$scope.myField.label = "Fruit name";

,您的模板就像

<form name="MyForm" ng-controller="Ctrl">
    <label for="MyField">{{myField.label}}</label>
    <input type="text" size="40" id="MyField" ng-model="myField.value" />
    <br /><br />
    You entered {{ myField.label }} for {{ myField.label }}
</form>

通过此字段标签将动态出现。根据您的要求在输入字段中应用自定义验证。

希望我完全理解你想要的东西。

答案 2 :(得分:0)

只需将标签文本放入输入title中,就可以使用“#”指令。您还可以使用它来确保标签ID匹配。

<label for="{{myfield_control.id}}">{{myfield_control.title}}</label>
<input type="text" size="40" id="MyField" ng-model="myField" title="My spoon is too big:" #myfield_control >

<br /><br />

You entered {{ myField }} for {{ myfield_control.title }}

myField是您的ngModel。 myfield_control是对您的输入控件的引用。