【发布时间】:2015-03-13 06:44:39
【问题描述】:
所以我正在开发一个应用程序,该应用程序有许多通过 jquery ajax 加载的部分,一些在它启动时,一些在响应其他部分,有些甚至是嵌套的。我不能做的是说“哦,mainContainer 中的内容改变了?”好吧,去编译那部分的代码。
原因是我希望能够将ui-sref's 放入我们不想弄乱的部分代码中。我想出了一个解决方案,但它并没有像我想象的那样工作,我在自定义指令中添加了$watch,但它触发了无数次。这是代码。
希望有人可以解释如何仅在 X <div> 中的内容通过发生的许多 ajax 调用之一更改时才运行一次,这样我就不需要立即将所有旧的将代码转换为 angular,并可以链接到使用 angular 的新代码。
app.directive('ngMainContainer', function ($compile, $timeout) {
console.log("main container directive");
return function (scope, elem, attrs) {
scope.$watch(function () {
return elem;
}, function (val) {
console.log("Something changed. " + val);
$timeout(function () {
$compile(val)(scope);
}, 0);
});
};
});
再次,我认为对传递给指令的元素进行监视是答案,但是即使我移动鼠标并单击通过 jquery ajax 加载的容器外部某处的页面,它也会运行。
【问题讨论】:
-
您是否尝试过将作用域变量设置为
elem.html()并在其上设置$watch? -
我收到此错误“错误:[jqLite:nosel] jqLite 不支持通过选择器查找元素!请参阅:docs.angularjs.org/api/angular.elementerrors.angularjs.org/1.3.5/jqLite/nosel - 这看起来应该不难,显然我错过了一些东西。
-
请看我的回答和我回答的下编辑部分。我试图解决两种方法来解决这个问题,其中一种包括不依赖于“注入”方面的角度的代码
标签: javascript jquery html ajax angularjs