angularjs textarea - 如何使其与 angularjs 下拉菜单中的选定值保持同步
angularjs textarea - how to keep it in sync with angularjs dropdowns selected values
我有几个下拉菜单,并根据选择更新了文本区域内容,但是当我尝试更新文本时,我认为该功能被触发了,并且不允许我更新。
这是我的 html :
<textarea ng-model="desc" ng-change="des"></textarea>
和angular
不知何故代码被删除了..请访问plunker:http://plnkr.co/edit/pVSiNrnAOY0A5v0iTmYQ?p=preview
你还需要
$scope.des = function() {
return $scope.d()
}
不确定你想做什么,但如果你刚刚尝试了这个
// Code goes here
app = angular.module('myapp',[]);
app.controller('main', function($scope) {
$scope.desc = "";
$scope.stat = "test";
$scope.d = function() {
for (var i = 0, len = $scope.stat.length; i < len; i++) {
if ($scope.stat[i].Id == $scope.selectedId && $scope.statDate == $scope.stat[i].StatDate) {
$scope.desc = $scope.stat[i].D;
return $scope.stat[i].D;
}
}
return "";
};
$scope.des = function() {
return $scope.d()
}
});
我明白你的问题了,如果我注释掉
// $scope.desc = $scope.stat[i].D;
它有效,但我认为你需要那个位:)
你想做什么?我认为您正在尝试在更改视图时更改模型。你可能需要一个指令。
这是我为日期时间所做的事情的一部分
.directive('formatteddate', function ($filter) {
return {
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
这是你的code/html。
最好使用监视功能,尤其是当控制器中的值可能发生变化时,因为这样可以确保它们保持同步。这个解决方案似乎也更容易看到发生了什么:
plunkr solution
仅使用监视功能监视所选值:
$scope.$watch('selectedId', function(newValue){
$scope.d();
});
我不确定您是否希望用户能够更改文本区域中的值。如果您不这样做,就像在您的示例中一样,那么我建议您将属性 ng-disabled="true" 添加到您的文本区域。
好的,那么如果您只是将 textarea 的 ng-model 值更新为 select 下拉列表的值呢?
这是笨蛋
http://plnkr.co/edit/mXQTcBu5rOJaQJKEFKpm?p=preview
将模型名称更改为:
<textarea ng-model="textarea" ng-change="desc()"></textarea>
然后更新,在您的脚本中,您的代码逻辑是:
$scope.d = function() {
for (var i = 0, len = $scope.stat.length; i < len; i++) {
console.log(i);
if ($scope.stat[i].Id == $scope.selectedId && $scope.statDate == $scope.stat[i].StatDate) {
$scope.desc = $scope.stat[i].D;
**$scope.textarea=$scope.desc;**
return $scope.stat[i].D;
}
}
return "";
};
我有几个下拉菜单,并根据选择更新了文本区域内容,但是当我尝试更新文本时,我认为该功能被触发了,并且不允许我更新。
这是我的 html :
<textarea ng-model="desc" ng-change="des"></textarea>
和angular
不知何故代码被删除了..请访问plunker:http://plnkr.co/edit/pVSiNrnAOY0A5v0iTmYQ?p=preview
你还需要
$scope.des = function() {
return $scope.d()
}
不确定你想做什么,但如果你刚刚尝试了这个
// Code goes here
app = angular.module('myapp',[]);
app.controller('main', function($scope) {
$scope.desc = "";
$scope.stat = "test";
$scope.d = function() {
for (var i = 0, len = $scope.stat.length; i < len; i++) {
if ($scope.stat[i].Id == $scope.selectedId && $scope.statDate == $scope.stat[i].StatDate) {
$scope.desc = $scope.stat[i].D;
return $scope.stat[i].D;
}
}
return "";
};
$scope.des = function() {
return $scope.d()
}
});
我明白你的问题了,如果我注释掉
// $scope.desc = $scope.stat[i].D;
它有效,但我认为你需要那个位:)
你想做什么?我认为您正在尝试在更改视图时更改模型。你可能需要一个指令。
这是我为日期时间所做的事情的一部分
.directive('formatteddate', function ($filter) {
return {
link: function (scope, element, attrs, ctrl) {
ctrl.$parsers.unshift(function (viewValue) {
这是你的code/html。
最好使用监视功能,尤其是当控制器中的值可能发生变化时,因为这样可以确保它们保持同步。这个解决方案似乎也更容易看到发生了什么: plunkr solution
仅使用监视功能监视所选值:
$scope.$watch('selectedId', function(newValue){
$scope.d();
});
我不确定您是否希望用户能够更改文本区域中的值。如果您不这样做,就像在您的示例中一样,那么我建议您将属性 ng-disabled="true" 添加到您的文本区域。
好的,那么如果您只是将 textarea 的 ng-model 值更新为 select 下拉列表的值呢?
这是笨蛋 http://plnkr.co/edit/mXQTcBu5rOJaQJKEFKpm?p=preview
将模型名称更改为:
<textarea ng-model="textarea" ng-change="desc()"></textarea>
然后更新,在您的脚本中,您的代码逻辑是:
$scope.d = function() {
for (var i = 0, len = $scope.stat.length; i < len; i++) {
console.log(i);
if ($scope.stat[i].Id == $scope.selectedId && $scope.statDate == $scope.stat[i].StatDate) {
$scope.desc = $scope.stat[i].D;
**$scope.textarea=$scope.desc;**
return $scope.stat[i].D;
}
}
return "";
};