AngularJS - $templateCache 未定义

Sjo*_*aar 2 angularjs angularjs-templates

我正在尝试在 AngularStrap 弹出窗口中加载模板文件,但是我在使用 $templateCache 时遇到问题。我似乎比其他问题退了一步,因此这看起来是双重的。

按照 API 文档,我<script type="text/ng-template" id="popoverTemplate.html"></script>在结束</body>标记之前添加了一个右侧。当我<div ng-include="'popoverTemplate.html'"></div>在我的页面上使用时,我什么也得不到。如果我尝试使用,console.log($templateCache.get("popoverTemplate.html"))我会得到“$templateCache 未定义”,这使我认为我错过了一个关键步骤。但是,我无法在文档或其他问题中找到如何做到这一点。

编辑:注入服务是缺失的环节。但是,当我注入服务时,控制器的其他功能不再起作用,但是如果您注入该函数的所有参数,工作代码将变为:

(function() {
    "use strict";
    angular.module("app").controller("managerController", ["$scope", "imageHierarchyRepository", "$templateCache", function ($scope, imageHierarchyRepository, $templateCache) {
        imageHierarchyRepository.query(function(data) {
            $scope.hierarchies = data;
        });

        var template = $templateCache.get("popoverTemplate.html");
        console.log(template);
    }]);
})();
Run Code Online (Sandbox Code Playgroud)

Rau*_*cco 5

要使用模板脚本标签。您必须将其插入角度应用程序中。ng-app如果您不使用标签,则位于具有属性的元素或用于引导应用程序的元素内ng-app

<body ng-app="myapp">

  <div ng-template="'myTemplate.html'"></div>

  <script type="text/ng-template" id="myTemplate.html">
    // whate ever
  </script>
</body> 
Run Code Online (Sandbox Code Playgroud)

如果您想检索应用程序组件上的模板,那么您需要将服务注入到您想要使用它的位置:

controller('FooCtrl', ['$templateCache', function ($templateCache) {
  var template = $templateCache.get('myTemplate.html');
}]);
Run Code Online (Sandbox Code Playgroud)

或者

controller('FooCtlr', FooCtrl);

FooCtrl ($templateCache) {};

FooCtrl.$inject = ['$templateCache'];
Run Code Online (Sandbox Code Playgroud)

编辑

不要使用相同的名称注册两个控制器,因为这样您就会用最后一个控制器覆盖第一个控制器。

(function() {
    "use strict";
    angular.module("app").controller("managerController",["$scope", "imageHierarchyRepository", "$templateCache", function ($scope, imageHierarchyRepository, $templateCache) {
        var template = $templateCache.get("popoverTemplate.html");
        console.log(template);
        imageHierarchyRepository.query(function(data) {
            $scope.hierarchies = data;
        });
    }]);


})();
Run Code Online (Sandbox Code Playgroud)