【问题标题】:Angularjs dynamically set attributeAngularjs动态设置属性
【发布时间】:2014-09-10 07:21:25
【问题描述】:

我正在尝试在 Angular js 中将属性动态添加到控制器中的 div。

 var table = document.getElementById("div_id").setAttribute("ng-click", "function_name()");
 $scope.$apply();

一切看起来都很好,在调试器中我看到该属性已添加但它不执行我的功能。您对如何向现有 div 添加属性以及如何使其工作有任何想法吗?

【问题讨论】:

  • 我认为你不应该调用那个函数,只说function_name
  • 你不能在你的click函数中添加一个布尔值的条件,默认为false,然后在你想“添加”这个函数的地方设置为true吗?

标签: javascript angularjs attributes setattribute


【解决方案1】:

你需要重新编译你的div

var el = angular.element("div_id");
$scope = el.scope();
$injector = el.injector();
$injector.invoke(function($compile){
   $compile(el)($scope)
})

http://jsfiddle.net/r2vb1ahy/

【讨论】:

  • 这仅适用于调试版本。在您拥有此 $compileProvider.debugInfoEnabled(false) 的生产构建中,$scope 将无法像这样使用。
  • 谢谢!你是救世主!
【解决方案2】:

通过 id 获取元素并设置新的属性和值

 var el =angular.element('#divId');
 el.attr('attr-name', 'attr-value');

【讨论】:

  • 这不是 DOM 操作吗?即,你不应该用 Angular 做什么?
  • 不,DOM 操作是您在需要时应该做的事情。唯一的要求是将 DOM 操作保留在控制器之外,并将其保留在自定义指令中。
【解决方案3】:

动态设置属性使用

var myEl = angular.element(document.querySelector('#divID'));
myEl.attr('myattr',"attr val");

获取属性值使用

var myEl = angular.element( document.querySelector('#divID'));
alert(myEl.attr('myattr'));

删除属性使用

var myEl = angular.element( document.querySelector( '#divID' ) );
myEl.removeAttr('myattr');

【讨论】:

  • 与操作员的问题完全不同的主题
【解决方案4】:

Angular2 提供[attr.<attribute name>] 来绑定属性值。

<div id="divID" [attr.role]="roleVal">
  This text color can be changed
</div>

在组件类中:

  addAttr() {
    this.roleVal = 'admin';
  }

  removeAttr() {
    this.roleVal = '';
  }

  checkAttr() {
    alert(this.roleVal);
  }

来自http://blog.sodhanalibrary.com/2016/02/set-attribute-and-remove-attribute-with.html

【讨论】:

  • 他说:“在 Angular js 中动态添加属性到控制器中的 div”。不是 angular2 也不是在 html 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2017-05-20
  • 1970-01-01
相关资源
最近更新 更多