Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:我可以手动将boolstrap模块转换成多个元素而不产生副作用吗?_Angularjs - Fatal编程技术网

AngularJS:我可以手动将boolstrap模块转换成多个元素而不产生副作用吗?

AngularJS:我可以手动将boolstrap模块转换成多个元素而不产生副作用吗?,angularjs,Angularjs,我们有一个网站,可以手动将angular模块引导到文档级别。此模块中的每个页面上都有多个控制器。这不是一个单页应用程序,它有一个传统的菜单,不同的页面加载不同的控制器 在过去几年中,这种设置为我们提供了很好的服务,但现在我们正在为facetedsearch添加一个新的控制器,它使用html5Mode=true。这就接管了网站上的所有链接 一种解决方案是创建一个指令,将目标动态应用于站点上的每个链接。Angular不会接管与目标的链接。我们不喜欢这个解决方案,因为该站点在不同的位置使用不同的目标

我们有一个网站,可以手动将angular模块引导到文档级别。此模块中的每个页面上都有多个控制器。这不是一个单页应用程序,它有一个传统的菜单,不同的页面加载不同的控制器

在过去几年中,这种设置为我们提供了很好的服务,但现在我们正在为facetedsearch添加一个新的控制器,它使用html5Mode=true。这就接管了网站上的所有链接

一种解决方案是创建一个指令,将目标动态应用于站点上的每个链接。Angular不会接管与目标的链接。我们不喜欢这个解决方案,因为该站点在不同的位置使用不同的目标

我们实现的解决方案涉及将控制器分组到模块下。由于Angular不允许嵌套模块,我们通过类引导每个模块,即任何给定页面都可能有多个包含多个控制器的模块

以下是is的外观:

主要问题:

自举的想法令人惊讶的工作,但我不了解的内部工作,以了解如果引导这种方式是消极的。有些页面将同一模块放大4或5次到不同的div中。行得通,但还好吗


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');
            }
        }
    };
});