2013-03-09 51 views
1

HTML代码:如何从控制器获取由内部指令创建的作用域?

<body ng-controller="MainCtrl"> 
    <h1>Hello {{name}}</h1> 
    <div id="aaa" myd1> 
     In a directive 
    </div> 
    <button ng-click="showDirectiveScope()">Show Directive Scope</button> 
</body> 

角码:

var app = angular.module('angularjs-starter', []); 

app.controller('MainCtrl', function($scope,$element) { 
    $scope.name = 'World'; 
    $scope.showDirectiveScope = function() { 
     var aaa = $element.find("#aaa"); 
     console.log(aaa); 
     console.log(angular.element(aaa).scope()); 
    } 
}); 

app.directive('myd1', function(){ 
    return { 
     scope: true 
    } 
}); 

会有在页面中显示指令范围按钮。当我点击它时,我想要角度来找到id=aaa的DOM,然后获取并记录由指令myd1创建的范围。

但它会打印undefined,哪里出错?

现场演示:http://plnkr.co/edit/ravJoVH2oGLDD0VUsO82?p=preview

回答

1

jqLite不支持选择。包括前角的jQuery在plunker,它会工作:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 

您也可以简化你的日志了一下,因为VAR aaa是一个包裹的jQuery元素:

console.log(aaa.scope()); 

工作plunker:http://plnkr.co/edit/bUsxo2UBWuiNkXBf8fsI?p=preview

+0

'$ element.find(“#aaa”)'can find正确的DOM,见日志:'[ready:function,toString:function,eq:function,push:function,sort:function ...]' – Freewind 2013-03-09 02:27:28

+0

@Freewind,这是错误的元素。当你添加jQuery时,日志会显示'[div#aaa.ng-scope,prevObject:b.fn.b.init [1],context:body.ng-scope,selector:“#aaa”,jquery:“ 1.9.1“,构造函数:函数...]'。工作plunker:http://plnkr.co/edit/bUsxo2UBWuiNkXBf8fsI?p=preview – 2013-03-09 02:32:14

+0

你是对的!我也怀疑没有使用jQuery的解决方案? – Freewind 2013-03-09 02:58:06

5

没有jQuery的答案:

app.controller('MainCtrl', function($scope,$element,$window) { 
    $scope.name = 'World'; 
    $scope.showDirectiveScope = function() { 
     var aaa = $window.document.getElementById('aaa'); 
     console.log(aaa); 
     console.log(angular.element(aaa).scope()); 
     console.log($element.scope()); 
    }; 
}); 
+0

是的!我们可以使用'getElementById'! – Freewind 2013-03-09 03:47:00

+0

这是在内部指令中获取角UI地图贴图对象的最佳方式吗? – FutuToad 2014-02-15 20:48:52