angularjs - 如何在不创建新范围的情况下将一个部分包含到另一个中?

标签 angularjs

我有这条路线。

// index.html
<div ng-controller="mainCtrl">
    <a href='#/one'>One</a>
    <a href='#/two'>Two</a>
</div>​​​​​​​​​
<div ng-view></div>

这就是我将部分加载到ng-view中的方式。
// app.js
​var App = angular.module('app', []);​​​​​​​
App.config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/one', {template: 'partials/one.html', controller: App.oneCtrl});
    $routeProvider.when('/two', {template: 'partials/two.html', controller: App.twoCtrl});
  }]);

当我单击链接时,它会在ng-view中向我显示适当的标记。但是,当我尝试使用partials/two.htmlpartials/one.html包含在ng-include中时,它可以正确显示它,但是会创建一个不同的作用域,因此我无法与其进行交互。
// partials/two.html - markup
<div ng-controller="twoCtrl">I'm a heading of Two</div>

// partials/one.html - markup
<div ng-controller="oneCtrl">I'm a heading of One</div>
<div ng-include src="'partials/two.html'"></div>

我该如何解决这个问题?还是有其他方法可以达到相同的结果?

最佳答案

您可以编写自己的include指令,该指令不会创建新的作用域。例如:

MyDirectives.directive('staticInclude', function($http, $templateCache, $compile) {
    return function(scope, element, attrs) {
        var templatePath = attrs.staticInclude;
        $http.get(templatePath, { cache: $templateCache }).success(function(response) {
            var contents = element.html(response).contents();
            $compile(contents)(scope);
        });
    };
});

您可以这样使用:
<div static-include="my/file.html"></div>

关于angularjs - 如何在不创建新范围的情况下将一个部分包含到另一个中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12393703/

相关文章:

javascript - Angular-ui-router 的问题 - 我无法将过滤器应用于指令中的重复

javascript - AngularJS 中表单 setvalidity 的延迟

html - 让屏幕阅读器阅读 Angular 应用程序中的新页面标题

html - 使用 Angularjs 每表行重复表单

angularjs - Materialise Css - Materialzie 在选择选项时选择多个滚动

angularjs - Internet Explorer Selenium protractor e2e 测试

javascript - 如何在 Angular 中插入字符串

javascript - 错误[$喷油器:unpr] Unknown provider: $translateMissingTranslationHandlerLogProvider <-

javascript - 更新 angularjs 库会导致 angular.bootstrap() 出现错误

javascript - Mapbox map 在页面加载时无法正确渲染