【发布时间】:2016-01-05 23:45:28
【问题描述】:
我正在尝试实现一个 AngularJS 指令,它具有自己的隔离范围,以使其可在同一页面中重用。该指令由另一个文件中的模板描述,因此我使用 templateUrl 选项。
app.directive('inputSettings', function () {
return {
restrict: 'E',
transclude: true,
templateUrl: 'templates/admin/inputSettingsTemplate.html',
controller: 'InputSettingsCtrl',
scope: {
settingkey: '=',
value: '=',
range: '=',
check: '=',
autosave: '='
}
};
});
在这个模板中,我有一个名为 form 的表单。
<form name="form" class="settingForm" novalidate>
<div class="form-group" ng-class="{ 'has-error' : form.input.$invalid, 'has-success' : form.input.$valid }">
<input class="form-control" name="input" type="text" ng-model="valueInput" />
<p ng-show="form.input.$invalid && !form.input.$pristine" class="help-block" translate="{{ 'inputSettingErrorMessage' | translate:translationData }}"></p>
</div>
</form>
我遇到的问题是我希望能够在我的指令控制器中使用如下代码设置模板内输入的有效性:
$scope.form.input.$setValidity("input", true);
但是当我尝试执行这样的代码时出现错误。 $scope 似乎不知道表单,所以我无法在指令的控制器中与表单交互。
你有什么想法吗?是不是我做错了什么?
提前致谢!
【问题讨论】:
-
您何时尝试执行此代码?直接在控制器初始化期间?
-
在 $scope.valueInput 变量的观察者中没有。实际上,我想在值更改时更新输入的有效性。
-
我建议检查新值是否与旧值不同。可能是第一次(在初始化期间)无论如何都会触发观察者,此时表单不在范围内,因为控制器在链接之前运行
-
我认为这不是问题,因为只有当我尝试更改输入中的值时才会出现错误。所以我猜初始化已经完成了一段时间。
-
介意做个小插曲吗?
标签: angularjs angularjs-directive angularjs-scope