我遇到了使用jQuery ajax和AngularJs加载的用户控件(.ascx)的问题。由于遗留问题,我无法改变加载用户控件的方式。问题是什么?让我解释一下:
AngularJs的控制器在模型更改BUT上有一个观察者,因为模型是使用ajax调用得到的,似乎控制器没有被启动" (因为异步问题,$ watch在加载用户控件时没有运行)。
我的第一个建议是,在ajax的完成过程中发起了一个事件,并且在angularjs的控制器中,订阅了这个事件,但我不知道怎样才能正确完成,如果还有另一个更好的选择。
有什么建议吗?提前谢谢。
以下是代码:
$.ajax( "example.php" ) .done(function() { alert( "success" ); })
<span class="price-value"> <%= Model.Price %> <asp:PlaceHolder ID="PriceLinkPlaceHolder" runat="server"> <price-details-link-directive data-price-parameters="<%= Server.HtmlEncode(Model.SerializedPriceParameters) %>">
</asp:PlaceHolder> </span>
<span class="price-value"> €449 <price-details-link-directive data-price-parameters="{ "priceDetailType": 2, "price": 449.0, "accommodationId": 38350, "departureDate": "01-01-0001", "transportType": 0, "duration": -1, "minOccupancy": -1, "maxOccupancy": -1, "roomType": "", "catalogBaseUrl": "" }"> </price-details-link-directive> </span>
angularApp.directive(&#39; priceDetailsLinkDirective&#39;,function(){ 返回{ 限制:&#39; E&#39;, 替换:true, templateUrl:&#39; /angular/prices/price_details_link.html', controller:&#39; priceDetailsLinkController&#39;, 范围: { priceParameters:&#39; @&#39; } }; });
答案 0 :(得分:0)
固定。我说的问题是内容是异步加载的,我们必须再次重新调用angular的指令以在新内容中应用模板。我在冲浪,找到了解决方案。
在我的ascx中我添加了一个新的javascript脚本(是的,我需要重构,仅用于测试目的)才能使用$ compile指令。
<span class="price-value">
<%= Model.Price %>
<asp:PlaceHolder ID="PriceLinkPlaceHolder" runat="server">
<price-details-link-directive data-price-parameters="<%= Server.HtmlEncode(Model.SerializedPriceParameters) %>"></price-details-link-directive>
</asp:PlaceHolder>
</span>
<script type="text/javascript">
$(".price-value").each(function () {
var content = $(this);
angular.element(document).injector().invoke(function ($compile) {
var scope = angular.element(content).scope();
$compile(content)(scope);
});
});
</script>
通过此修改,指令再次绑定到新内容并正确应用所需的更改。这些信息来自AngularJS + JQuery : How to get dynamic content working in angularjs(非常感谢Noah Freitas!)