角度 - >渲染和克隆元素 - >范围访问

时间:2015-10-13 16:21:24

标签: javascript angularjs scope

我需要能够在渲染和克隆元素的范围内更改变量并使用方法。怎么做到这一点? 这是jsfiddle:http://jsfiddle.net/kashesandr/1pwzm1jb/2/

模板:

<div ng-controller="MyCtrl" class="name">
  Hello, {{name}}!
</div>

代码:

var myApp = angular.module('myApp',[]);

function MyCtrl($scope) {
    $scope.name = 'Superhero';
    $scope.setName = function(name){
        $scope.name = name;
    };
}

function update() {
    var element = document.querySelector('.name')
    var scope = angular.element(element).scope()
    var copy = element.cloneNode(true)
    document.body.appendChild(copy);

    var names = document.querySelectorAll('.name');
    console.log(names);

    var element1 = names[0];
    var scope1 = angular.element(element1).scope();
    scope1.$apply(function(){
        scope1.setName(123);
    });

    var element2 = names[1];
    var scope2 = angular.element(element2).scope();
    scope2.$apply(function(){
        scope2.setName(234); // this must work
    });


}   
setTimeout(update, 1500);

谢谢!

1 个答案:

答案 0 :(得分:1)

不幸的是,你提出的建议,如果完全按照你的意思说明必须要做的话,在Angular中是不允许的。不允许克隆或复制窗口或范围对象。这意味着您无法复制<div class="name">{{name}}</div>,将副本附加到正文,修改它,然后运行$ digest循环。这将导致无限循环/循环引用。

有关ng:cpws

的详细信息,请参阅此链接

https://docs.angularjs.org/error/ng/cpws

如果您可以访问源代码,我会假设您这样做,您应该探索更新角度应用程序,而不是尝试从外部修改它。您在此处描述的内容很容易在本申请的范围内完成。