2013-03-09 26 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

相關問題