我的例子:
<button ng-click="action()" >Hello World</button>
Status : <span >{{foo}}</span>
<script>
var status= Math.random()*1000;
</script>
我想将javascript变量status
传递给action()
。这可能吗?
function Mycontroller($scope,$window){
var status = $window.status//works
$scope.action = function($window){
//$window -is undefined;
//var status = $window.status
debugger
$scope.foo='default value for foo' + status;
}
}
示例2:
window.status= Math.random()*1000;
<button ng-click="action(window.status)" >Hello World</button>
$scope.action = function($status){
// $status - is undefined ...Why??
}
非常感谢。
答案 0 :(得分:4)
不,这是不可能的。表达式使用在作用域上公开的变量。它们无法访问全局变量(即窗口的属性),除非窗口本身暴露在范围内(使用action(window.status)
,前提是您之前已调用$scope.window = $window
)。
答案 1 :(得分:2)
正如JB Nizet所说,您无法直接在表达式中访问窗口或其他全局变量(如ng-click中的那个),只能访问范围。因此窗口将在表达式中返回undefined。但是,正如HarishR所说,您可以访问控制器中的窗口或控制器方法,如他的代码所示。
但是,如果你真的想设置它并从视图中传递它,你可以做一个ng-init。
<div ng-controller="myController" ng-init="status = 1000">
<button ng-click="action(status)">Hello World</button>
Status : <span>{{foo}}</span>
</div>
请参阅plunker:http://plnkr.co/edit/OWsLjAlLB4II2jGaKupN?p=preview
请注意,您无法访问ng-init表达式中的Math
,因为它是一个全局变量,但不在范围内。
答案 2 :(得分:1)
尝试以下
$scope.action = function(){
var status = $window.status
}
你不需要在$ scope.action中收到$ window ...
为什么你得到它未定义是因为,你没有从HTML传递它
<button ng-click="action()" >Hello World</button>
实际上你不需要从html传递它而你试图在你的控制器中接收它......