【发布时间】:2014-11-12 18:29:02
【问题描述】:
编辑: 分叉了@EliteOctagon 的 plunker,奇怪的是它正在工作!不明白为什么下面的代码不是。 http://plnkr.co/edit/y8uvulA9RHQ1Y9mwzin1
EDIT2: 分叉了之前的 plunker,并在控制器的逻辑中添加了 $timeout,但它停止了工作!猜猜它真的是加载顺序。看看吧:http://plnkr.co/edit/ivmGQmEHTatNzBWhppyf
我是 Angular 新手,无法理解指令隔离范围。
我需要创建一个指令以在我的页面中打印出<span/>,其中包含有关视图控制器中的对象和对象的信息。
我试图做的是隔离指令范围并通过具有双向绑定的属性传递对象(参见下面的代码)。但是,当尝试在指令的 link 函数中访问对象时,它总是显示为未定义。
我在这里错过了什么?
提前谢谢你们。
html视图模板中的指令使用:
<party-starts party="party"></party-starts>
指令JS代码
.directive('partyStarts', function(){
return {
restrict: 'E',
template: '<div id="partyStart><i class="icon ion-pin"></i> </div>',
scope: {
party: '='
},
link: function(scope, el) {
var party = scope.party;
var icon = el.find('i');
var statusStr = angular.element('<span/>');
var final;
console.log('scope '+scope);
if(party.Diatodo){
if(party.datahora.isSame(moment(), 'day') || party.datahora.isSame(moment().add(1, 'd'), 'day')){
icon.css({
'color': 'green'
});
statusStr.text(' É hoje');
el.append(statusStr);
}else{
icon.css({
'color': '#999'
});
statusStr.text(' Começa em '+party.datahora.fromNow());
el.append(statusStr);
}
return;
}
if(party.datahora.unix() == party.datahoraf.unix()){
final = party.datahora.clone().add(1, 'd').hour(6);
}else{
final = party.datahoraf;
}
if(party.datahora.twix(final).isCurrent()){
icon.css({
'color': 'green'
});
statusStr.text(' Começou há '+party.datahora.fromNow());
el.append(statusStr);
}else if(party.datahora.twix(final).isFuture()){
icon.css({
'color': '#999'
});
statusStr.text(' Começa em '+party.datahora.fromNow());
el.append(statusStr);
}else{
icon.css({
'color': 'red'
});
statusStr.text(' Já terminou');
el.append(statusStr);
}
}
};
})
【问题讨论】:
-
你能用一些代码做一个笨拙的人吗?这是一个空白模板plnkr.co/edit/TkONdJqtD6nSg6s0Da59
-
只要在父控制器内部定义了$scope.parent,应该没有问题。您是否可能在 ng-if 或 ng-repeat 中使用派对开始,因此无意中创建了新的子范围?
-
这里没有 ng-repeat 循环,只是传递了控制器范围内的常规对象
-
使用 $scope.party 的父控制器是什么样的?
-
@EliteOctagon 刚刚用等效代码分叉了你的 plunker,它就可以正常工作......根本无法理解 :( plnkr.co/edit/y8uvulA9RHQ1Y9mwzin1
标签: javascript angularjs angularjs-directive angularjs-scope