有一个textarea输入。并点击两个按钮。
`<textarea ng-bind="msg"></textarea>
<div class="cancel-btn" ng-click="is_hide=false;"></div>
<div class="submit-btn" ng-click="submit_card()"></div>`
在textarea中输入一些字符,然后点击'submit-btn',范围将保存'msg'。但是如果点击'cancel-btn',范围将不会保存消息。
保存msg后,输入并单击'cancel-btn',我想textarea的innerHTML是scope.msg而不是输入。
现在,我想执行$scope.$apply()
更新dom,但警告错误$digest already in progress
。
也许我需要ng-model
textarea,并使用另一个参数saved_msg
保存msg
,点击'cancel-btn'后,点msg = saved_msg
。但是,有一些方便的方法吗?
------------------- update 6/25 -----------------
`<div ng-controller="Ctrl">
<div ng-class="{'selted':cid == 0}" data-cat="0"></div>
<div ng-class="{'selted':cid == 1}" data-cat="1"></div>
<div ng-class="{'selted':cid == 2}" data-cat="2"></div>
<textarea ng-bind="msg"></textarea>
<div class="cancel-btn" ng-click="is_hide=false;"></div>
<div class="submit-btn" ng-click="submit_card()"></div>
</div>
In fact, I use some directive by
jQuery`改变dom类,当点击'cancel-btn'时,我想刷新dom决定范围。
它可能类似于$ render。
-------------------- update 6/26 --------------
谢谢您帮忙。我找到了解决问题的方法。我添加一个div#main
来包含我想要保存/刷新的内容。 ps:关心一些变化!
以下是我的方式。也许你有更好的方式,欢迎分享!
`<div ng-controller="Ctrl">
<div id="main">
<div ng-class="{'selted':cid == 0}" data-cat="0" selt></div>
<div ng-class="{'selted':cid == 1}" data-cat="1" selt></div>
<div ng-class="{'selted':cid == 2}" data-cat="2" selt></div>
<textarea ng-bind="msg" id="msg"></textarea>
</div>
<div class="cancel-btn" ng-click="reset()"></div>
<div class="submit-btn" ng-click="submit_card()"></div>
</div>`
在控制器中,
`app.controller('Ctrl', ['$scope', '$compile', function($scope, $compile) {
$scope.reset = function(){ //reset depend on scope
$('#main div').removeClass('selted');
//the dom maybe change, need clear 'selted' class first
//compile(dom)(scope)
$('#main').html($compile($('#main').html())($scope));
}
$scope.save = function(){ //save the scope
$scope.msg = $('#msg').val();
$scope.cid = $('.selted').index()+1;
}
}]);
app.directive('selt', function(){
//this is directive, only change class on dom
return function(scope,ele){
ele.click(function(){
ele.addClass('selted').siblings().removeClass('selted');
})
}
});
`
答案 0 :(得分:0)
1 - 您需要将ng-bind
的{{1}}替换为textarea
,以便在您输入时更新范围。
2 - 要提供类似ng-model
,请以简单的方式将cancel
内容替换为ng-click
等功能。在您的控制器中:
cancel(formName)
angular.module('exampleApp', [])
.controller('Ctrl', ['$scope', function ($scope) {
$scope.is_hide = false;
$scope.msg = null;
$scope.cancel = function cancel (form) {
$scope.is_hide = true;
$scope.msg = null;
if (form) {
form.$setPristine();
}
};
}]);
参数是您在formName
上使用的包装器form
元素的名称,用于访问某些特定属性,例如HTML
,这会将$setPristine
处理重置为其初始状态。注意:这并不意味着将重置字段值。