【问题标题】:angularjs find properties of div in directiveangularjs在指令中查找div的属性
【发布时间】:2013-08-09 05:13:15
【问题描述】:

Angular 新手,stackoverflow 新手。几天来一直试图解决这个问题。这是我的问题:

我想将一组框居中。

有没有办法访问 div 的属性(带有 id 或类名)并在指令中操作它们?

在我的 html 中,我正在使用 ng-repeat 创建 div,这些 div 是显示的框。我有一个指令,目前我正在尝试使用它来查找和操作 html 中 div/指令的属性,但是我似乎无法做到这一点。

我用谷歌搜索了很多,发现了类似的问题,但在我的代码中似乎没有任何问题。

这是一个小提琴: http://jsfiddle.net/3m87R/

app.directive('someBoxes', function()
{
    return function(scope, element, attrs)
    {
        element.css('border', '1px solid white');
        //element.css('width', '200px');

        var body = angular.element(document).find('.bookitem');
        console.log(body[0].offsetWidth);

        if(scope.$last)
        {
            //console.log("element name is: " + element.attr("class"));
            //console.log("element is: " + element);
            //console.log($(".bookitem").children("div").attr("class"));
            //console.log($('.container').children('div').attr('class'));
        }
    };
});

感谢您提供的任何帮助。

【问题讨论】:

  • 你看过 transclude 吗?我认为在自定义标签中使用 ng-repeat 会更好

标签: javascript html angularjs


【解决方案1】:

原因是因为ng-repeat改变了DOM,子元素不可用 在指令编译期间。 所以在子元素上需要一个 $watch。

这通知指令添加了子元素,然后对它们执行操作。

$watch 必须跳过 nodeType 是 "comment:(type 8)"

这里是工作小提琴:http://jsfiddle.net/3m87R/3/

链接部分:

 link: function ($scope, element, attrs, controller) {
                    $scope.$watch(element.children(),function(){
                    var children = element.children();
                    for(var i=0;i<children.length;i++){
                        if(children[i].nodeType !== 8){
                            angular.element(children[i]).css('background', 'orange');
                        }
                    }
                });
            }

【讨论】:

  • 嘿,感谢您的努力,我在我的代码中尝试了这个,但它似乎不起作用,我也不明白“不等于 8”部分。这也没有获得新元素的属性。但感谢您的努力。
  • 只是提供你的用例的小提琴。好吧 angularjs 在执行 ng-repeat 时添加节点 type8,所以应该跳过它,更多检查:w3schools.com/dom/dom_nodetype.asp
  • 它有调用指令的html和指令。该指令位于controller.js 文件中,html 位于home.html 文件中,该文件通过app.js 加载到index.html 文件中,一切正常,除了我不知道如何在指令中检索属性调用指令的 div (或 html 文件中的指令,无论您如何称呼它)。我会再次尝试您的解决方案。
【解决方案2】:

你已经接近了!我能够让指令在我的一个测试小提琴中工作。看看吧。

$(element).css('border', '1px solid red');
$(element).css('text-align', 'center');

查看这个小提琴,我有你的指令样本。

jsFiddle

【讨论】:

  • 嘿,有没有办法不对您那里的 html 中的高度进行硬编码?我想动态地在指令中找到元素的宽度(或任何其他属性)。因此,想象一下创建了 3 个框,它们连续出现,但它们是左对齐的。我希望指令找到它们的宽度,然后自己进行居中等,然后将其应用于元素。希望这很清楚,感谢您的努力。
猜你喜欢
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-03-14
相关资源
最近更新 更多