如何在angularjs中将范围变量设置为空

时间:2016-09-15 23:50:28

标签: javascript angularjs

这是我的代码。

$scope.sendFeedback = function ()  {

    var mobile1 = $scope.mobile;
    var feedback1 = $scope.feedback;

    var userfeedback = {
        mobile: mobile1,
        feedback: feedback1
    };

    var feedbackRef = firebase.database().ref("feedback/");
    var newFeedbackRef = feedbackRef.push();
    newFeedbackRef.set(userfeedback, function(error) {
        if (error) {
            alert ('Error while registering feedback.');
        } else {
            $scope.feedback = '';
            alert ('Your feedback is registered.');

        }
    });
}

调用此功能后,我可以看到警报('您的反馈已注册。');但$ scope.feedback =''没有将特定的textField设置为空。我试过$ scope.feedback = null;还有,但没有运气。

这里有什么问题?

编辑:添加了HTML视图。

<md-input-container class="md-block">
    <label>Feedback</label>
    <input required="" name="feedback" ng-model="feedback" >
    <div ng-messages="projectForm.feedback.$error" role="alert">
     <div ng-message-exp="['required']">
        This field is required.
    </div>          </div>

</md-input-container>

3 个答案:

答案 0 :(得分:1)

我多次遇到这种问题,并使用以下解决方法解决了这个问题:

    angular.element(document.getElementById('doc'))
     .scope().$apply( function() {
            $scope.feedback=''
     )}

为了测试SO的代码片段运行符,我主要使用您自己的代码,制作了这个非常小的工作示例。希望这会有所帮助。

<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>

<script>
  var module=angular.module('test',[]).controller('test', function($scope) 
{
    $scope.click = function() {
            $scope.feedback = '';
            alert ('Your feedback is registered.');
    }
})
</script>
</head>
<body>

<div ng-app="test" ng-controller="test" id='feedback'>
<md-input-container class="md-block">
    <label>Feedback</label>
    <input required="" name="feedback" ng-model="feedback" >
    <div ng-messages="projectForm.feedback.$error" role="alert">
     <div ng-message-exp="['required']">
        This field is required.
    </div>          </div>

   <button ng-click='click();'>click?</button>
</md-input-container>
  </div>

答案 1 :(得分:1)

$scope.feedback = [];

(或)

setTimeout(function () {
    $scope.$apply(function () {
        $scope.feedback = [];
    });
}, 1000);

答案 2 :(得分:0)

您是否设置了ng-app和ng-controller?我在我的机器上测试了你的代码,只要你设置了应用程序和控制器,它就能运行。 你能做一个JSFiddle吗?