繁体   English   中英

从Javascript调用AngularJS隔离范围函数

[英]Calling an AngularJS isolated scope function from Javascript

我们正在慢慢移植应用程序以使用Angular。 我有一个angular模块和一个指令,试图将某些功能绑定到HTML元素。

angular.module('myApp', [ ])

  .controller('myCtrl', function($scope){
    $scope.someFunction = function(){return "Not what I want to see.";};
    $scope.foo = "BAR";
  })

  .directive('myDirective', function(){
    return {
      restrict: 'EA',
      transclude: true,
      template: '<div><p>Here is some template html.</p></div>',
      link:{ post:function(scope, element, attrs){
               var elementId = attrs.myId;
               scope.someFunction = function(){return "I want to see this, elementId: " + elementId;};
               scope.foo = "xxxx";
             }
      }
    };
  });

给定一些html:

...
<myDirective my-id="e1"></myDirective>
<myDirective my-id="e2"></myDirective>
<myDirective my-id="e3"></myDirective>
...

和一些JavaScript:

...
var test = angular.element(document.getElementById("e2") ).scope();
alert(test.someFunction());
...

我希望看到“我想看到这个,elementId:e2”,但我不是。 当我使用Firebug检查javascript时,我看到测试对象引用的是主作用域,而不是我期望的隔离作用域(希望吗?)。 我可以这样说是因为test.foo的值为“ BAR”,而不是“ xxxx”。 此外,我在Firebug中看到$$ childHead对象是我想要的内部作用域,因此我可以肯定,除了test。$$ childHead之类的东西之外,还必须有一种方法来获取它。 有适当的方法来做到这一点吗?

整个团队对于Angular来说还相对较新,如果我错过了明显的事情,请原谅我。 我意识到这可能不是“折角方式”(欢迎任何评论),但它符合我们当前的迁移策略和需求。 提前致谢。

我需要添加scope:true,这样我就可以了:

return {
  restrict: 'EA',
  transclude: true,
  scope: true,
  ...
};

我的指令定义。 PSL使我走上了正确的道路; 我当时认为传递给链接器的范围对于每个元素都是唯一的。 这是一个例子。 http://plnkr.co/edit/w7OGtRgtys7AeRtWH9qe?p=info

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM