首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未请求Angular .directive templateUrl

未请求Angular .directive templateUrl
EN

Stack Overflow用户
提问于 2016-09-15 20:22:10
回答 2查看 150关注 0票数 0

我还在学习angular,所以我想编写自己的控件来了解更多关于angular的工作原理。我从一个datepicker开始,因为它是我偶尔需要的一个控件,它嵌入了很多永远不会改变的功能。

我通过直接在指令中声明template来启动和运行datepicker,但是当我想将模板重新定位到它自己的HTML文件时,它开始变得很笨拙。

根据angular文档,应该可以为控件的模板指定一个外部HTML文件,所以随着控件的发展,我尝试这样做。

指令现在如下所示:

代码语言:javascript
复制
angular.module('my.Controls', [])
.directive('myDatepicker', [function () {
    return {
        restrict: 'AE',
        scope: {},
        require: 'ngModel',
        templateUrl: '/Templates/my/DatePicker.html',
        link: function (scope, iElement, iAttrs, ngModelController) {
        // Some datepicker functionality
    }
}]);

当然还有一个HTML文件,用于测试该指令是否正常工作:

代码语言:javascript
复制
<!DOCTYPE html>
<html ng-app="myApp">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <meta charset="utf-8" />
    <script type="text/javascript" src="Scripts/angular/current/angular.min.js"></script>
    <script type="text/javascript" src="Scripts/my/Controls.js"></script>
    <script type="text/javascript">
        var app = angular.module('myApp', ['my.Controls']);
        var ctrl = app.controller('myCtrl', ['$scope', function ($scope) {
$scope.Date = new Date(2016, 08, 15);
        }]);

    </script>
</head>
<body ng-controller="myCtrl">
    {{Date}}
    <my-datepicker ng-model="Date" />
</body>
</html>

现在,我可以确认.js文件已加载,应用程序和控制器工作正常。但是,由于我将template: '...'属性更改为templateUrl: '...',我甚至无法验证angular是否尝试加载HTML文件,因为我看不到对它的任何请求。

这里我漏掉了什么?为什么angular甚至不尝试从URL加载模板?

EN

回答 2

Stack Overflow用户

发布于 2016-09-15 20:35:00

小心你的脚本。我建议将您的myApp模块定义移动到脚本文件中。我预计你现在可能会有控制台错误,这些错误会阻碍你的应用程序正常运行。因为它在小提琴里工作。

我首先对你的脚本做了3处修改,我只是把它们都放在内联脚本块中进行测试(不要这样做,把它们放在一个文件中)。然后,我从Templates/my/DatePicker.html中删除了/。我连接了angular的1.5x版本。除非您使用的是Angular2,否则下面的所有代码都应该可以很好地工作。

代码语言:javascript
复制
angular.module('my.Controls', [])
    .directive('myDatepicker', [function () {
        return {
            restrict: 'AE',
            scope: {},
            require: 'ngModel',
            templateUrl: 'Templates/my/DatePicker.html',
            link: function (scope, iElement, iAttrs, ngModelController) {
            // Some datepicker functionality
            }
        }
}]);


var app = angular.module('myApp', ['my.Controls']);
var ctrl = app.controller('myCtrl', ['$scope', function ($scope)     {
       $scope.Date = new Date(2016, 08, 15);
}]);

Plunkr可以在here上找到。

票数 1
EN

Stack Overflow用户

发布于 2016-09-15 20:26:54

确保存在正确的html路径和名称。我可以看到你的模板网址有一些点/Templates/my.DatePicker.html.替换为下划线(_)或连字符(-)并检查。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39510921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档