根据这篇文章:Angularjs select elements from list and display in textarea
我想添加功能:
你能这么善良并解释我该怎么做?
答案 0 :(得分:0)
这是一个有效的jsfiddle做你所要求的。每次单击列表元素时,它都会附加到textarea。
main函数是一个通用指令,可以在控制器之间重用:
myApp.directive('txtArea', function() {
return {
restrict: 'AE',
replace: 'true',
scope: {data: '=', model: '=ngModel'},
template: "<textarea></textarea>",
link: function(scope, elem, attrs) {
scope.$watch('data', function(newVal, oldVal) {
if (newVal) {
scope.model += JSON.parse(newVal[0])[attrs.property];
}
});
}
};
});
要使用该指令,请在HTML中插入以下内容(在适当的位置 - 请参阅jsfiddle):
<txt-area data="myModel" property="mail" placeholder="expected value" ng-model='model' ng-trim='false'></txt-area>
数据myModel
是选择列表中的选择数据,before。
property mail
是用于从所选元素中提取值的属性。
model
包含textarea的内容,您可以在应用中根据需要重复使用。
以下是完整的相关HTML代码:
<div ng-app='myApp'>
<div ng-controller="Main">
<p>Original</p>
<select multiple="multiple" ng-model="myModel">
<option ng-repeat="d in data" value="{{d}}">{{d.mail}}</option>
</select>
<txt-area data="myModel" property="mail" placeholder="expected value" ng-model='model' ng-trim='false'></txt-area>
<div>{{model}}</div>
</div>
</div>
这是控制器和应用程序部分:
var myApp = angular.module('myApp', []);
myApp.controller('Main', function($scope){
$scope.data = [{mail:"a@foo"},{mail:"b@foo"},{mail:"c@foo"}];
$scope.model = "";
});
确保您如上所述定义/初始化每个指令的模型(例如$scope.model = ""
),否则它将显示为最初未定义。