WebStorm Angular 指令范围和 HTML

Posted

技术标签:

【中文标题】WebStorm Angular 指令范围和 HTML【英文标题】:WebStorm Angular directive scope & HTML 【发布时间】:2016-05-01 02:58:57 【问题描述】:

由于我是新来的,所以我要自我介绍一下。我的名字是来自荷兰的 Tomas,我刚刚开始密集编码。 Atm 我正在使用 AngularJS 为我写一个交互式简历的项目。我想这样做,所以当我申请工作时我有一些东西要展示。 因此,我可能会比他们更努力地做一些事情来展示我目前能做的事情。

好的,回到问题。我在 html 正文代码中使用 AngularJS 指令时遇到了问题。

.JS 文件是:

/**
 * Created by Tomas on 24-1-2016.
 */
var myApp = angular.module("PersonApp",[])

.controller("TomasInformation", ["$scope", function($scope, $routeParams) 
    $scope.tomas = 
        firstName: "Thomas",
        lastName: "Slepers",
        middleNames: "Dirk",
        dateOfBirth: new Date("1985","03","18"),
        placeOfBirth: "Rosmalen",
        city: "Maastricht",
        address: ["Banniersborg", "176", "B", "6238 VS"],
        telephone: "+31 6386492",
        email: "t.example@example.com",
        nationality: "Dutch"
    ;
])

.directive('personInfo', function() 
    return 
        restrict: "E",
        scope: 
            info: "="
        ,
        templateUrl: 'JS/personInfo.html'
    ;
);

我调用的模板 .html 文件是:

<ul>
    <li>info.firstName info.lastName </li>
    <li>info.firstName info.middleNames</li>
    <li>info.dateOfBirth | date</li>
    <li>info.placeOfBirth</li>
    <li>info.city</li>
    <li>info.address[0] info.address[1]info.address[2], info.address[3]</li>
    <li>info.telephone</li>
    <li>info.email</li>
    <li>info.nationality</li>
</ul>

我在 Index.html 主页中使用的 html 代码是:

<div class="right_information" ng-app="PersonApp" ng-controller="TomasInformation">
   <person-info info="tomas"></person-info>
</div>

现在的问题是调用&lt;person-info&gt; 元素并没有给我我的名字等,而只是我网站上的原始代码,例如info.firstName。

我已经检查了一些东西,比如是否加载了 Angular 库(就是这种情况)。

有人能看出我做错了什么吗?我在这里不知所措。 附言我已经更改了控制器中的个人数据,因此呼叫/电子邮件将没有任何用处:)

编辑:我在浏览器 (Chrome) 中完成了 F12 操作,看到以下错误输出,但似乎无法理解它的含义。我在 https 中添加了星号,因为我不允许发布超过 2 个链接 :) . angular.js:11655 错误:[$compile:multidir] http://errors.angularjs.org/1.3.15/$compile/multidir?p0=personInfo&p1=personInfo&p2=template&p3=%3Cperson-info%20info%3D%22tomas%22%3E 在错误(本机) 在 https*://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:6:417 在 Na (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:67:19) 在发(https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:62:4) 在 https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:65:406 在 https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:112:113 在 n.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:126:15) 在 n.$digest (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:123:106) 在 n.$apply (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:126:293) 在 l (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js:81:240) (匿名函数)@angular.js:11655

Index.html首页的&lt;head&gt;是:

<head>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
    <script src="JS/app.js"></script>
    <link type="text/css" rel="stylesheet" href="stylesheet.css"/>
    <title></title>
</head>

所以我很确定 angular.min.js 已加载。因为当我去掉&lt;person-info&gt;标签并直接插入模板代码时,效果很好:/

【问题讨论】:

听起来像是 javascript 错误。浏览器控制台输出是什么? 只需将所有代码复制到小提琴中即可。 如果您的页面中有info.firstName,则表示您有错误。运行调试器(按 F12),重新加载页面并告诉我们是否有错误 你是 sur angular(min).js 加载了吗? 指令模板显示为OP提到的,然后必须加载角度。 【参考方案1】:

这是您在应用程序中的所有代码吗?就像 Alainlb 在 plunkr 中显示的那样,此代码有效。

但是您看到的错误是由冲突指令引起的。

来自 Angular 文档:

应用多个不兼容指令的示例场景 相同的元素包括:

    多个指令请求隔离范围。 多个指令以相同的名称发布控制器。 使用嵌入选项声明的多个指令。 尝试定义模板或模板URL 的多个指令。

检查您的应用是否存在这些情况。

【讨论】:

【参考方案2】:

对不起,打扰了。 看起来问题很简单,你的回答给了我正确的方法。

我正在查看指令声明,为了测试,将指令的名称从“personInfo”更改为 testTestTest。这是因为我在指令中调用的模板也称为 personInfo,但带有扩展名 HTML。

这显然成功了。似乎这些陈述受到干扰,现在它可以工作了,我可以继续 :) 谢谢你的帮助:)

【讨论】:

以上是关于WebStorm Angular 指令范围和 HTML的主要内容,如果未能解决你的问题,请参考以下文章

Angular 自定义指令范围未按预期更新

Angular 指令:范围与 bindToController

Angular 组件或指令匹配“jhi-product-list”元素超出了当前 Angular 模块的范围

Angular 指令的隔离范围上的可选双向绑定

如何使指令和组件在全球范围内可用

angular 2 种子,webstorm 2016.1 突然停止导入库