【问题标题】:Passing data from html div tag to controller in AngularJS将数据从html div标签传递到AngularJS中的控制器
【发布时间】:2016-05-13 15:46:29
【问题描述】:

我的 html 中有一个 div。在 div 内部,我正在调用一个控制器。我需要将一些数据从 div 传递到控制器。我在 div 中没有任何其他 html 元素,例如输入字段/按钮等。

    <div ng-controller="writeLoadTimeController">
    <!--adding this controller to send the page load time to server-->
    $scope.loadTime=$window.performance.timing.domContentLoadedEventEnd-$window.performance.timing.navigationStart;

    </div>

如何将 loadTime 字段的值传递给控制器​​。

【问题讨论】:

  • 当你想在任何特定事件上传递数据时??
  • 页面加载完成后。

标签: angularjs


【解决方案1】:

你可以试试:

<div id="loadTime" ng-controller="writeLoadTimeController" ng-load="someFunction()">


</div>

和控制器:

$scope.someFunction = function(){
        $scope.loadTime=$window.performance.timing.domContentLoadedEventEnd-$window.performance.timing.navigationStart;
    }

【讨论】:

    【解决方案2】:

    1:您可以将 onload 事件添加到 div 并调用将为您计算 loadTime 的函数。应该是这样的。

    你的html:

    <div id="loadTime" ng-controller="writeLoadTimeController">
    </div>
    

    和控制器:

    app.controller("writeLoadTimeController", function($scope){
        $scope.loadTime ="";
        document.getElementById("loadTime").addEventListener('onload', onloadHandler);
        function onloadHandler(){
            $scope.loadTime=$window.performance.timing.domContentLoadedEventEnd-$window.performance.timing.navigationStart;
        }
    });
    

    然后你可以在html中使用{{loadTime}}

    2:您可以避免添加 onload 侦听器并执行以下操作:

    你的html:

    <div id="loadTime" ng-controller="writeLoadTimeController">
    </div>
    

    和控制器:

    app.controller("writeLoadTimeController", function($scope){
        $scope.loadTime ="";
    
        $scope.loadTimeCalculator = function(){
            $scope.loadTime=$window.performance.timing.domContentLoadedEventEnd-$window.performance.timing.navigationStart;
        }
    
        $scope.loadTimeCalculator();
    });
    

    writeLoadTimeController被调用时,它会调用loadTimeCalculator()函数。

    希望对你有帮助:)

    【讨论】:

    • 我已经尝试过这种方法,但在可能的情况下,我会在两个 html 页面中调用 writeLoadTimeController,并且它们的 loadTime 始终给出相同的值。所以,我猜是因为我在控制器内部执行表达式,loadTime 是控制器在加载时采用的表达式,而不是视图/html。这就是我想避免将此语句放在控制器中的原因,并希望将其添加到每个 html 页面中。
    • 控制器是否只调用一次?我的意思是当你打开另一个页面控制器时不会被第二次调用?
    • 当我打开第二页时再次调用它,因为在第二页中我也在调用同一个控制器。我已经放了警报消息,以交叉验证它。另外,即使我创建了两个不同的控制器,每个页面使用相同的代码,结果也是一样的。
    • 是的,我自己试过了,结果是一样的。会调查它并让你知道是否有办法。
    • 当您切换到第二页时,您的页面是否在浏览器中再次加载?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多