如何使用AngularJS获取元素的属性

时间:2014-09-29 17:04:40

标签: javascript angularjs

我有以下代码:

<div class="col-md-10" data-ng-controller="type-controller">
    <div class="btn-group" data-toggle="buttons">
        <label class="btn btn-success" ng-model="typeId" data-btn-radio="'1'">
            Option 1
        </label>
        <label class="btn btn-success" ng-model="typeId" data-btn-radio="'2'">
            Option 2
        </label>
    </div>
    <input data-ng-model="typeId" name="typeId" type="hidden" data-start="2" />
</div>

我的type-controller为空,所以我省略了它 - 但我希望从data-start内的最后一个输入中获取属性type-controller的值。

我没有使用jQuery。

2 个答案:

答案 0 :(得分:1)

Angular内置了jqLit​​e,它仍然具有attr()函数。但是,从控制器手动摆弄DOM并不是Angular“方式”。您的范围应该是它们之间的接口。

我很好奇为什么你的UI中的属性中有一个值,而你的模型/范围中没有先定义它?这个值如何变化?是否有理由不能在控制器中设置它:

$scope.start = 2;

然后:

<input data-ng-model="typeId" name="typeId" type="hidden" data-start="{{start}}" />

您能解释一下数据启动的意义吗?

答案 1 :(得分:1)

如果属性data-start很重要,因为它正被其他第三方库使用,那么您可以考虑在服务器上创建时使用ng-init

<input data-ng-model="typeId" name="typeId" type="hidden" data-start="2" 
 ng-init='start = 2' />

这将基本上运行您需要的任何代码,并且不涉及您必须从DOM解析数据属性。

您可以编写一个非常简单的指令来拉入值并使用表达式发布。这基本上可以完成同样的事情,但在我看来更难:

angular.module('data-pluck', [])
  .controller('fooController', function() {

    this.name = 'Foo Controller';

  })
  .directive('pluckData', ['$parse',
    function($parse) {

      return {
        restrict: 'A',
        link: function(scope, elem, attrs) {
          var expression = function() {};
          expression.assign = function() {};

          scope.$watch(attrs.placeData, function() {
            expression = $parse(attrs.placeData);
          });

          scope.$watch(attrs.pluckData, function() {
            expression.assign(scope, attrs[attrs.pluckData]);
          });
        }
      };

    }
  ]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='data-pluck' ng-controller='fooController as ctrl'>
  <h1>{{ctrl.name}}</h1>
  <div data-my-val="I'm value one" pluck-data='myVal' place-data='ctrl.valueOne'>
    <p>I'm a regular old <code>&lt;p&gt;</code> tag</p>
    <input type='hidden' data-my-val="I'm the second value" pluck-data='myVal' place-data='ctrl.valueTwo' />
  </div>
  <h3>These Values Populated Dynamically</h3>
  <ul>
    <li>ctrl.valueOne = {{ctrl.valueOne}}</li>
    <li>ctrl.valueTwo = {{ctrl.valueTwo}}</li>
  </ul>
</div>