eHx*_*eHx 2 angularjs angularjs-directive angular-ngmodel
我对AngularJS指令有很好的理解,但我认为我的指令缺少一些东西.
出了什么问题:在初始页面加载时,ngModel被正确触发,我成功接收数据,并在输入中建模.
我做的一切......都行不通.如果我修改输入中的文本,则不会更新模型.
请注意,如果我不使用指令(直接HTML),它可以正常工作.
我有一个这样的指令:
.directive('defaultFormGroup', function () {
return {
restrict: 'A',
templateUrl: 'form-group.html',
replace: true,
scope: {
uniqueId: '@',
labelTitle: '@',
placeholderText: '@',
ngModel: '=',
bsLabelClasses: '@',
bsFormControlClasses: '@'
}
};
})
Run Code Online (Sandbox Code Playgroud)
该指令的模板:
<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>
Run Code Online (Sandbox Code Playgroud)
以下是我在模板中调用指令的方法:
<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>
Run Code Online (Sandbox Code Playgroud)
单选按钮也有同样的问题:
.directive('radioSwitch', function () {
return {
restrict: 'A',
templateUrl: 'radio-switch.html',
replace: true,
scope: {
ngModel: '=',
radioName: '@',
firstId: '@',
firstValue: '@',
firstLabel: '@',
secondId: '@',
secondValue: '@',
secondLabel: '@',
}
};
})
Run Code Online (Sandbox Code Playgroud)
模板:
<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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
更新
我在我的指令中遗漏了一些内容...我想选择inputType(文本,电子邮件,密码等...)
如果它是一个textarea,HTML是不同的...但似乎这行不起作用data-ng-if=" inputType !== textarea ">...如果我删除它,它的工作原理
谁知道为什么?
这是一个吸烟者:http://plnkr.co/edit/ITElF2epihSALeTutQAz
指令本身似乎没有出现错误:使用您的指令查看下面的示例,您可以看到指令model的ng-model属性更新.所以,请尝试重现您的问题,以便我们可以帮助您(嵌入式代码段或jsfiddle,或只是更多代码)
angular.module('test', [])
.controller('ctrl', function($scope) {
$scope.model = 'foo';
})
.directive('defaultFormGroup', function () {
return {
restrict: 'A',
template: '<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>',
replace: true,
scope: {
uniqueId: '@',
labelTitle: '@',
placeholderText: '@',
ngModel: '=',
bsLabelClasses: '@',
bsFormControlClasses: '@'
}
};
})Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="ctrl">
<div>model: {{model}}</div>
<div default-form-group ng-model="model"></div>
</div>Run Code Online (Sandbox Code Playgroud)
更新:似乎问题来自ng-if,如下面的代码片段所示.它通过使用nh-show来修复,因为ng-if可能会松散指令的绑定.我不清楚确切的原因.
angular.module('test', [])
.controller('ctrl', function($scope) {
$scope.model = 'foo';
})
.directive('defaultFormGroup', function () {
return {
restrict: 'A',
template: '<div ng-if="true"><input type="text" data-ng-model="ngModel" /></div>',
replace: true,
scope: {
ngModel: '='
}
};
})Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="test" ng-controller="ctrl">
<div>model: {{model}}</div>
<div default-form-group ng-model="model"></div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1582 次 |
| 最近记录: |