我的主要概述页面中有一些部分视图(在不同的链接上运行)。这些部分视图中的每一个都有一个引用指令(扩展器)的元素。
我的问题是,如果我转到具有该指令的局部视图,然后返回主屏幕并转到不同的局部视图,该指令将无法在最新屏幕上运行。
partials加载了ajax调用,并使用视图中父级的.remove()删除。
我不确定问题出在哪里,所以这里有一些可能相关的代码。
我的扩展器指令:
angular.module("toolkit").directive("expander", ['$timeout', function($timeout)
{
function determine(scope, heightValue) {
if (scope.isExpanded) collapse(heightValue);
else expand(heightValue);
}
function expand(heightValue) {
//does expanding things
}
function collapse(heightValue) {
//does collapsing things
}
return {
restrict: 'A',
link: function (scope, elm, attrs) {
var height = 0;
scope.$watch(attrs.expanderHeight, function (value) {
height = value;
});
$timeout(
function () {
$(elm[0]).on('click', function () {
scope.$apply(determine(scope, height));
});
}
)
}
};
}]);
部分视图的Html(它们都有相同的东西):
<div class="acct-sum round-a accordion-top">
<div expander expander-height="170" class="title">
<span class="ui-icon ui-icon-circle-plus"></span>
<div class="accordion-inner">
Irrelevant things here.
</div>
</div>
</div>
该指令在每个局部视图中运行,只要它是我第一次访问。但在从一个视图切换回另一个视图后,它将停止工作。我已经在其中加入了断点,它根本就没有出现过。
有什么想法吗?如果有人发现它相关,我可以发布更多代码。
编辑:
部分视图会在点击时加载,如下所示:
// Bind account summary links to load the accountHistory partial view.
$(".view-history").on("click", function (e) {
e.preventDefault();
hide();
var acctId = $(this).data("account");
var t = $("#body_content_wrapper");
t.append("<div class='progress' />");
// load the template from the server in lue of client-routing
util.load({
viewId: "accounthistory",
target: t,
action: util.config.baseUri + "accountHistory",
type: "POST",
data: { id: $(this).data("account") }
})
.complete(function (html) {
$(".progress").remove();
util.publish("telnot.views.showAccountHistory", { account: acctId });
});
});