[英]AngularJS : Calling a function in a directive from a controller with isolated scope
[英]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.