处理角度和标记属性更改(和DOM)时的最佳实践

时间:2017-01-01 13:58:37

标签: javascript angularjs dom attributes

前提:我是AngularJS的新手,并试图学习它。在下面的例子中,我正在监视textarea中的文本长度和光标位置。确实如此。

var app = angular.module('myApp', []);

app.controller('myCtrl', function($scope) {

    $scope.pos = function() {
        var id = document.getElementById("myArea");
        return id.selectionStart;
    }

    $scope.len = function() {
        return $scope.myTextarea.length;
    }

    $scope.myTextarea = "Ciao, sono una textarea";

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp">
  <div ng-controller="myCtrl">
    <textarea id="myArea" ng-click ng-keyup ng-model="myTextarea" ng-trim="false"></textarea>
    <br/>
    <br/>
    <div>Length: {{ len() }}</div>
    <div>Cursor position: {{ pos() }}</div>
  </div>
</body>

我的问题是:是否有更“有棱角”的方式(我的意思是不使用JQuery,或getElementById或类似)?有没有更好的方法来访问“myArea”textarea的“selectionStart”属性,而无需在DOM中搜索ID?

一般来说,AngularJS中是否有一种方法可以访问绑定到ngModel的元素(类似“$ scope.myTextarea.boundElement”)?

在此代码的先前版本中,我用来定义两个事件处理程序以获取selectionStart的值。然后我注意到ng-click和ng-keyup只需要在那里,即使没有与实际功能相关联,也可以使代码工作。

无论如何,他们必须获得selectionStart的正确值。另一方面,他们没有必要使“长度”工作。我本来期望对“selectionStart”的更改会像“长度”一样“自动”监视,并且像“return $ scope.myTextarea.selectionStart”这样的东西会这样做。

这可能吗?不知何故?

0 个答案:

没有答案