与 ASP.NET UpdatePanel AngularJS 事件

发布时间: 2017/3/26 5:54:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想在这一问题非常喜欢使用 ASP UpdatePanel 内的 AngularJS: AngularJS 与 ASP.NET Updatepanel 部分更新

解决方案也帮了大忙,至少关于的静态部分,即一切都显示初始化时。

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function (sender, args) {
                var elem = angular.element(document.getElementById("myDiv"));
                var newElem = $compile(elem)($scope);
                $scope.$apply();
                elem.replaceWith(newElem.html());
            });

属性设置内 add_endRequest() 正确显示。我的问题是所有交互都都死了。

例如,如果我把

<div id="myDiv">
    {{testtext}}
    <div ng-init="testtext='hello world'"/>
</div>

不出所料,它会打印出该字符串。但当 ie 添加一个 click 事件,什么也没有发生。

<div ng-click="testtext='hello world'">Click here</div>

任何的想法为什么?据我所知的角 $compile$scope.$apply() 应适用于 angularjs 的所有功能,但是它似乎并不。

解决方法 1:

搞明白了从我的朋友们一点帮助。问题是,只有与我 AngularJS 列表元素 <div id="myDiv"> 被重新编译在 add_endRequest() 方法。当更改为 div 中持有的 angularjs 控制器,该节周围的整个 UpdatePanel......

<div ng-controller="UpdatePanelController" id="UpdatePanelController">
    <asp:UpdatePanel ID="UpdatePanel" UpdateMode="Conditional" runat="server">
        ...
    </asp:UpdatePanel>  
</div>

然后编译它的子元素......

    OneViewApp.controller("UpdatePanelController", function ($scope, $compile) {            
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function () {
            var elem = angular.element(document.getElementById("UpdatePanelController"));
            $compile(elem.children())($scope);
            $scope.$apply();
        });
    });

一切正常。因为 UpdatePanel 替换 html,整个控制器需要重新编译,以便它能够正常工作。

这当然也可以通过 (重新) 每一步,作为另一种答案,建议的角应用程序的引导性,但上面的解决方法在这种情况下是接近原始代码,从而更简单。

赞助商