【发布时间】:2023-03-11 01:27:01
【问题描述】:
我对 AngularJS 指令有很好的理解,但我认为我的指令在这里遗漏了一些东西。
出了什么问题:在初始页面加载时,ngModel 被正确触发,我成功接收到数据并在输入中建模。
我之后所做的一切……都行不通。如果我修改输入中的文本,模型不会更新。
请注意,如果我不使用指令(直接 HTML),它可以正常工作。
我有这样的指令:
.directive('defaultFormGroup', function () {
return {
restrict: 'A',
templateUrl: 'form-group.html',
replace: true,
scope: {
uniqueId: '@',
labelTitle: '@',
placeholderText: '@',
ngModel: '=',
bsLabelClasses: '@',
bsFormControlClasses: '@'
}
};
})
指令的模板:
<div class="form-group">
<label class="{{bsLabelClasses}} control-label text-left" for="{{uniqueId}}">{{labelTitle}}</label>
<div class="{{bsFormControlClasses}}">
<input type="text" class="form-control" id="{{uniqueId}}" placeholder="{{placeholderText}}" data-ng-model="ngModel">
</div>
</div>
这是我在模板中调用指令的方式:
<div data-default-form-group
data-label-title="Name"
data-placeholder-text="Name"
data-unique-id="name"
data-bs-label-classes="col-sm-2 col-md-2"
data-bs-form-control-classes="col-sm-3 col-md-3"
data-ng-model="site.name">
</div>
单选按钮也有同样的问题:
.directive('radioSwitch', function () {
return {
restrict: 'A',
templateUrl: 'radio-switch.html',
replace: true,
scope: {
ngModel: '=',
radioName: '@',
firstId: '@',
firstValue: '@',
firstLabel: '@',
secondId: '@',
secondValue: '@',
secondLabel: '@',
}
};
})
模板:
<input type="radio" name="{{radioName}}" value="{{firstValue}}" id="{{firstId}}" data-ng-model="ngModel">
<label for="{{firstID}}">{{firstLabel}}</label>
<input type="radio" name="{{radioName}}" value="{{secondValue}}" id="{{secondId}}" data-ng-model="ngModel">
<label for="{{secondID}}">{{secondLabel}}</label>
HTML:
<div data-radio-switch
data-ng-model="site.existingCustomer"
data-first-label="Yes"
data-second-label="No"
data-radio-name="existingCustomer"
data-first-value="True"
data-first-id="true"
data-second-value="False"
data-second-id="false">
</div>
我错过了什么?
更新
我的指令中遗漏了一些东西...我想选择输入类型(文本、电子邮件、密码等...)
如果是文本区域,则 HTML 是不同的...但似乎这条线不起作用data-ng-if=" inputType !== textarea "> ...如果我删除它,它会起作用
有人知道为什么吗?
【问题讨论】:
-
我认为您需要要求 ngModel 而不是在指令范围内声明它
-
您可以通过链接函数中的 attrs 访问这些值,而不是作用域(您需要添加一个)
-
你能发布你的控制器代码吗?
-
你能设置一个 plunker 来演示这个问题吗?这是一个角度模板:plnkr.co/edit/WprgipAdFBtxDKM6jogo?p=info
标签: angularjs angularjs-directive angular-ngmodel