我试图给这个问题尽可能精确的标题。
我对AngularJS还是很陌生,但是在这个问题上我很固执。我试图制作一个jsfiddle来更好地说明我的问题,但是它依赖于太多单独的文件。而且a还没有在线上,所以请耐心等待。:)
因此,基本上,我有一个使用构建的应用程序yeoman init angular
,其app.js
外观如下:
"use strict"
var myApp = angular.module("myApp", [])
.config(function($routeProvider) {
$routeProvider
.when("/lineup", {
templateUrl: "views/lineup.html",
controller: "LineupCtrl"
})
//other routes
.otherwise({
redirectTo: "/"
});
})
.directive("playerlist", function() {
return {
restrict: "E",
transclude: false,
scope : {},
templateUrl : "views/directives/playerlist.html",
controller : function($scope) {
$.get("/players")
.success(function(players) {
$scope.players = players;
});
},
replace : true
}
});
我index.html
拿起app.js
并有一个参考的锚#/lineup
,它有效地打开views/lineup.html
;
为简化起见,我们假设后者仅包含(自定义)<playerlist></playerlist>
标签。
在指令的控制器函数内部,我确信它$.get("/players")
可以正常工作,因为从chrome的网络标签中可以看到,响应作为一组播放器正确传递。
最后,我views/directives/playerlist.html
有替换<playerlist>
标签的代码,如下所示:
<table class="table table-striped">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Role</th>
<th>Strength</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="player in players">
<td>{{player.first_name}} {{player.last_name}}</td>
<td>{{player.age}}</td>
<td>{{player.role}}</td>
<td>{{player.strength}}</td>
</tr>
</tbody>
</table>
我的想法是使“ playerlist”指令独立于,LineupCtrl
因为我可能想在项目中的其他地方重用它。
好的,这里是这样:当我单击#/lineup
第一次加载的锚点时,tbody
上表的元素为空(没有附加行);有趣的是,当我第二次单击它时,桌子上的$.get("/players")
指令正确地填充了我得到的球员。我怀疑这是由于在playerlist.html的呈现和分配的$
scope.players变量之间发生了微小的延迟。但是,这不是角度应用程序的重点吗?当范围变量更改时,相应的视图(及其模板)是否会更新?
请帮忙!
干杯,
安德里亚
每当在角度函数之外更新范围变量时,都需要告诉angular某些更改。请参阅scope.$apply
。
$.get("/players")
.success(function(players) {
$scope.$apply(function () {
$scope.players = players;
});
});
另外,angular具有内置的ajax服务,因此不需要使用jQuery。在教程中可以找到很好的解释:5-XHRs和依赖注入。
问题内容: 我尝试编写一个小指令,以将其内容包装在另一个模板文件中。 这段代码: 应该有以下输出: 因为布局“默认”具有以下代码: 这里的指令代码: }); 我的问题: 例如,当我在模板(在布局模板中或在布局标签内部)中使用范围变量时。它只是最初工作。如果我更新变量,则该指令不再更新。整个链接功能只会被触发一次。 我认为,AngularJS不知道,该指令使用范围变量,因此不会被更新。但是我不知道如
问题内容: 这是我的AngularJs指令。它原本希望在模板中显示div,但是在运行代码时却什么也没有显示。 这是HTML 这是AngularJS指令 这是演示 问题答案: 声明指令时,您使用了名称,但这是错误的。您应该使用,因为它将被转换为元素。 指令名称中的任何大写字母都将转换为连字符,因为元素中未使用大写字母。例如将翻译为。 正如其他人提到的,AngularJS使用以下标准化规则进行标准化:
问题内容: 我想在没有自己的模板的AngularJS中创建可重用的指令。我也想为该指令设置隔离范围。我的方法的最佳做法是什么?为什么我的示例不符合我的预期? 我希望可以分别从指令中编辑obj1和obj2。 HTML: JS: PLUNKR:http://plnkr.co/edit/Dw8IiFVSOZGjSTFGRMzZ 问题答案: 您的代码现在的工作方式是,每个指令的内容都绑定到父作用域,而不是
问题内容: 在以下情况下如何使用包含。目的是在html(部分)文件中使用标记,而不是在模板中(在指令内)定义标记。 我在这里找到了一个很棒的树指令。( 来源)原文: http //jsfiddle.net/n8dPm/ 我没有在指令中定义模板,而是尝试使用包含在内的内容。我还将Angular更新为1.2.0.rc2。更新时间:http://jsfiddle.net/aZx7B/2/ 低于错误 Ty
问题内容: 我正在尝试根据范围值使用不同的模板进行指令。 这是我到目前为止所做的,我不知道为什么它不起作用http://jsbin.com/mibeyotu/1/edit HTML元素: 指示: 问题答案: 1)您正在将内容作为属性传递到html中。试试这个: 代替: 2)指令的数据部分正在被编译,因此您应该使用其他东西。代替数据类型,例如datan-type。 链接在这里: http://jsb
问题内容: 我需要从指令内的回调中修改根范围属性。但是,该指令位于由switch指令创建的内部范围内。 HTML JavaScript 小提琴:http://jsfiddle.net/nJ7FQ/ 我的目标是能够在“选定区域”中显示“新值”。我该如何完成我想做的事情?我究竟做错了什么? 此外,我正在尝试制作一个组件。有没有办法做到这一点,但要隔离范围? 问题答案: 我更新了小提琴,基本上不得不去父