如何获得一个元素与AngularJS

如何获得一个元素与AngularJS

问题描述:

属性我有以下代码:如何获得一个元素与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。

+0

可能重复[AngularJS - 获取元素属性值(http://*.com/questions/ 24673418/angularjs-get-element-attributes-values) – isherwood 2014-09-29 17:11:46

+0

我不使用ng-click ...还有其他选择吗? – user3900456 2014-09-29 17:14:23

+0

你想要做什么?正如下面所说的,你不应该在控制器中弄乱DOM。你应该为此使用指令。 – Vadim 2014-09-29 17:24:19

IF,因为它是被一些其他的第三方库的属性data-start是显著,那么你可能会在服务器上创建这个时候考虑简单地使用ng-init你需要,而且不涉及你必须从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>

+0

是的,做到了! – user3900456 2014-09-29 17:48:03

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

我很好奇你为什么你的UI中的属性值没有在你的模型/范围中首先定义?这个值如何改变?是否有一个原因,为什么你不能将其设置在控制器:

$scope.start = 2; 

然后:

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

你能解释一下什么数据开始是为了做什么?

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

这将从根本上运行任意代码:

+0

这是因为页面是从服务器加载的一个值集合,我想为该范围设置该值... – user3900456 2014-09-29 17:30:14

+0

在data-start中设置的值将用于设置范围typeId – user3900456 2014-09-29 17:30:53