AngularJS:我可以手动将boolstrap模块转换成多个元素而不产生副作用吗?
我们有一个网站,可以手动将angular模块引导到文档级别。此模块中的每个页面上都有多个控制器。这不是一个单页应用程序,它有一个传统的菜单,不同的页面加载不同的控制器 在过去几年中,这种设置为我们提供了很好的服务,但现在我们正在为facetedsearch添加一个新的控制器,它使用html5Mode=true。这就接管了网站上的所有链接 一种解决方案是创建一个指令,将目标动态应用于站点上的每个链接。Angular不会接管与目标的链接。我们不喜欢这个解决方案,因为该站点在不同的位置使用不同的目标 我们实现的解决方案涉及将控制器分组到模块下。由于Angular不允许嵌套模块,我们通过类引导每个模块,即任何给定页面都可能有多个包含多个控制器的模块 以下是is的外观: 主要问题: 自举的想法令人惊讶的工作,但我不了解的内部工作,以了解如果引导这种方式是消极的。有些页面将同一模块放大4或5次到不同的div中。行得通,但还好吗AngularJS:我可以手动将boolstrap模块转换成多个元素而不产生副作用吗?,angularjs,Angularjs,我们有一个网站,可以手动将angular模块引导到文档级别。此模块中的每个页面上都有多个控制器。这不是一个单页应用程序,它有一个传统的菜单,不同的页面加载不同的控制器 在过去几年中,这种设置为我们提供了很好的服务,但现在我们正在为facetedsearch添加一个新的控制器,它使用html5Mode=true。这就接管了网站上的所有链接 一种解决方案是创建一个指令,将目标动态应用于站点上的每个链接。Angular不会接管与目标的链接。我们不喜欢这个解决方案,因为该站点在不同的位置使用不同的目标
e、 g.这是否会产生大量开销或其他副作用?是的,在应用程序之间共享的东西上会有一系列副作用,因此必须同步,例如窗口位置和滚动。这很可能是XY问题,每页有多个应用看起来像是可怕的解决方案,在这里,以及几乎所有其他可能的情况下 目标属性和绝对链接是防止$location捕获链接的最流行和可靠的解决方案。我们清楚地看到了为什么会这样 该指令在保持现有目标属性不变的情况下,可以很容易地解决这个问题
// <a external href="...
// <a rel="external" href="...
// <a data-rel="external" href="...
app.directive('a', function () {
return {
restrict: 'E',
link: function (scope, element, attrs) {
var relExternal = attrs.rel && attrs.rel.split(/\s+/).indexOf('external') >= 0;
if (!('target' in attrs) && (relExternal || 'external' in attrs)) {
attrs.$set('target', '_self');
}
}
};
});
同样的事情也可以反过来做,即在除内部链接之外的任何地方启用目标
// <a external href="...
// <a rel="external" href="...
// <a data-rel="external" href="...
app.directive('a', function () {
return {
restrict: 'E',
link: function (scope, element, attrs) {
var relExternal = attrs.rel && attrs.rel.split(/\s+/).indexOf('external') >= 0;
if (!('target' in attrs) && (relExternal || 'external' in attrs)) {
attrs.$set('target', '_self');
}
}
};
});