AngularJS从addEventListener返回作用域中的值

时间:2015-02-02 10:45:52

标签: javascript angularjs iframe javascript-events

我在iframe中有一个AngularApp,我有一个带有此代码的控制器来从iframe容器(主窗口)获取click事件:

        $window.addEventListener('message', function(e) {    
            $scope.$apply(function() {
                console.log(e.data.url); // http://<something>
                $scope.widget.pageUrl = e.data.url;
            });
        });

        console.log($scope.widget.pageUrl); // undefined

一切正常,但我无法填充$ scope.widget.pageUrl变量。它在$ window.addEventListener之外仍未定义。

任何提示?

2 个答案:

答案 0 :(得分:1)

这也应该有效:

$window.addEventListener('message', function (e) {
        console.log(e.data.url); // http://<something>
        $scope.widget.pageUrl = e.data.url;
        $scope.$apply();
});

console.log($scope.widget.pageUrl);

答案 1 :(得分:0)

Yaa,因为javascript具有函数级别范围,这意味着您需要将e传递给您提供给$scope.$apply的函数,否则此函数将不具有事件对象。

这样做应该有所帮助。

$scope.$apply(function(e) {
    console.log(e.data.url);
    $scope.widget.pageUrl = e.data.url;
});

我还没有测试过它。