首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS绑定属性存在

AngularJS绑定属性存在
EN

Stack Overflow用户
提问于 2012-10-21 21:16:43
回答 2查看 816关注 0票数 2

我希望将属性的存在绑定到AngularJS中的变量。具体来说,sandbox表示iframe。假设我将$myCtrl.allowJavascript作为变量,我想这样做:

代码语言:javascript
复制
<iframe src="..." sandbox />

sandbox属性出现在allowJavascript == false时,我希望沙箱属性在allowJavascript == true时消失。

AngularJS有这样的机制吗?

我能找到的最接近的东西是这里,它基本上说“它只适用于某些属性”--但对沙箱不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-22 12:06:13

对于可重用性,您可以按照以下思路将其泛化:

代码语言:javascript
复制
app.directive("addAttr", function() {
  return function(scope, element, attrs) {
    scope.$watch(attrs.addAttr, function(addAttr) {
      for (var key in addAttr) {
        if (addAttr[key]) element.attr(key, true);
        else element.removeAttr(key);
      }
    }
  }
}

你会用它就像:

代码语言:javascript
复制
<iframe add-attr="{sandbox: allowJavaScript, someOtherAttr: someOtherVar}">
票数 3
EN

Stack Overflow用户

发布于 2012-10-21 22:56:23

如果您愿意,可以为此创建一个自定义指令。

代码语言:javascript
复制
app.directive('sandboxIf', function() {
  return {
        restrict: 'A',
        link: function(scope, elem, attr, ctrl) {
            /* eval whatever was passed to sandbox-if="" 
               to see if it's true or false. */
            if(scope.$eval(attr.sandboxIf)) {
                elem.attr('sandbox','sandbox'); //sandbox="sandbox"
            }else{
                elem.removeAttr('sandbox');
            }
        }
    };
});

使用方式如下:

代码语言:javascript
复制
<iframe sandbox-if="foo"></iframe>

甚至是

代码语言:javascript
复制
<iframe sandbox-if="test()"></iframe>

在那里控制器会像

代码语言:javascript
复制
app.controller('MyCtrl', function($scope) {
   $scope.foo = true;

   $scope.test = function() {
       return true;
   };
});
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13002286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档