只有空格的角度清除输入问题(当前稳定v1.5)

时间:2016-03-06 01:38:44

标签: javascript angularjs string whitespace trim

JSfiddle代码在底部

我的问题:如果<input>字段中有空格,您就可以清除&#34;通过将其范围值设置为空字符串而使用angular的值,它会在输入字段中留下空格。

原因:我理解它为什么会这样做,因为角度摘要没有看到变化,因为由于修剪的空白通过ng-trim已经使范围变量为空

我的问题:是否有正确的方法来确保输入字段变空?我知道有多种解决方案,但所有这些解决方案都是黑客攻击或无法工作。

  • 将范围值设置为null,然后在$ timeout后设置为空白。但是这可能会导致问题,因为代码只期望范围值中的字符串。
  • 将元素设置为ng-trim,但我喜欢,其值自动修剪
  • 使用jquery清空输入字段(或直接设置元素的值)。这可能是我最终要解决的解决方案(一个清除输入并同时覆盖范围变量的函数),但我希望有一些不那么hacky的东西。

jsfiddle:https://jsfiddle.net/0kf84g5o/3/

HTML

<div ng-app=MyApp>
  <div ng-controller="TestCtl">
    Press "tabs and spaces", add spaces and/or tabs, and then press "blank out'<br>
    <input ng-model=TestInput id=TestInput>
    <input type=button value="abc" ng-click="ChangeTestValue('abc')">
    <input type=button value="Tabs and spaces"ng-click="ChangeTestValue('\t  \t')">
    <input type=button value="Blank out" ng-click="ChangeTestValue('')">
    <input type=button value="Null out" ng-click="ChangeTestValue(null);">
    <pre>
      Angular Value: --{{TestInput}}--

      JSONified Angular Value: --{{TestInputJSON}}--

      Actual input value JSONified: --{{TestInputActualJSON}}--
    </pre>
  </div>
</div>

的Javascript

var MyApp=angular.module('MyApp', []);
MyApp.controller('TestCtl', function($scope, $timeout) {
    //Update the value programatically
    $scope.TestInput='Start text';
    $scope.ChangeTestValue=function(Str) {
        $scope.TestInput=Str;
    };

    //Update TestInputJSON
    $scope.$watch('TestInput', function(NewVal) { //When angular values changes
        scope.TestInputJSON=JSON.stringify(NewVal);
    });

    //Update TestInputActualJSON
    $scope.$watch('TestInput', function(NewVal) {  //When angular value changes
        $timeout(UpdateTestInputActualJSON, 1); //Wait for 1ms to update so the new value is alread set
    });
    $('#TestInput').on('keyup paste', UpdateTestInputActualJSON); //On a jquery event
    function UpdateTestInputActualJSON(e) //Do the actual update of TestInputActualJSON
    {
        $scope.TestInputActualJSON=JSON.stringify($('#TestInput').val());
        if(e) //Call angular digest if coming from jQuery
            $scope.$apply();
    }
});

0 个答案:

没有答案