将javascript变量传递给ng-click

时间:2014-07-25 14:36:27

标签: angularjs

我的例子:

<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??
    }

非常感谢。

3 个答案:

答案 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传递它而你试图在你的控制器中接收它......