2013-07-31 116 views
24

我有一个角度范围变量streetName。将角度范围变量传递给Javascript

<script type="text/javascript"> 
    angular.module('addApp').controller('add', ['$scope',function($scope) { 
      $scope.streetName = "Bonita Ln"; 
    }]); 
</script> 

如何在此控制器(添加)范围下定义的javascript中访问streetName。请帮忙。

<div ng-app="addApp" ng-controller="add"> 
StreetName: {{streetName}} 

<script type="text/javascript"> 
//here i need to access the value of streetName... 
</script> 

</div> 

回答

30

这种方式很长,但它的工作原理:

angular.element(document.querySelector('[ng-controller="add"]')).scope().streetName 

更具可读性:

var dom_el = document.querySelector('[ng-controller="add"]'); 
    var ng_el = angular.element(dom_el); 
    var ng_el_scope = ng_el.scope(); 
    var street_name = ng_el_scope.streetName; 

而且这短得多,如果你使用jQuery:

var street_name = $('[ng-controller="add"]').scope().streetName; 

链接到jsfiddle demo

+0

但这返回null。它无法读取控制器的“添加”。 – JPN

+0

@JPN似乎元素尚未准备好。尝试把我的代码放在'window.onload'处理程序 – Cherniv

+0

它的工作:)但有时它给出null。看着我失踪..谢谢一吨..! – JPN

12

您可以通过$ window服务将范围增值税转至常见js var。

像这样:

angular.module('addApp', []) 
.controller('add', ['$window', function ($window) { 
    ... 
    $window.streetName = $scope.streetName; 
    ... 
} 

,之后附上您的JS在COMON js代码这样的:

<script type="text/javascript"> 
    document.write("\<script src='...' type='text/javascript'>\<\/script>"); 
</script> 

但请记住,它的解决办法,而不是最好的解决办法

+0

感谢提示! –

+0

这是完美的!以防万一它不清楚,你可以通过javascript窗口对象访问分配给angular $ window对象的值。 –

+3

@Sergey Panfilov:但是我如何在myscript值中访问该值。? – lalitpatadiya

0

我面临类似的问题。我找到了一个工作。它对我来说效果不错,但不知道它是否是正确的方法。

在html中创建一个隐藏的输入字段,并从角度分配它的值。 在JavaScript中访问此值。 确保在脚本标记之前创建它,以便在到达脚本标记时对其进行初始化。

事情是这样的:

<div ng-app="addApp" ng-controller="add"> 
    StreetName: {{streetName}} 
    <input type="hidden" id="dummyStreetName" value={{streetName}}> 
    <script type="text/javascript"> 
     console.log("I got the street name "+$("#dummyStreetName").val()); 
    </script> 
</div> 
相关问题