为什么我的指令不能识别它的参数?
Why doesn't my directive recognize its parameters?
我正在复习旧的 classes 并尝试完成我以前无法完成的练习。这个 class 在 Ionic1 中,使用 Angular1。
我有一个使用两个参数的指令;第一个是要显示数据的对象,第二个是hide/show显示中某些元素的参数
这是实现控制器的视图:
<ion-list>
<film-directive
ng-repeat="tmpMovie in myController.movieList"
movie="tmpMovie"
displayBtnAddFav="false"
></film-directive>
</ion-list>
这里是指令结构:
const FilmDir = function(){
return {
"restrict":"E",
"scope":{
"movie" :"=",
"displayBtnAddFav" :"&"
},
"template":`
<ion-item>
<p ng-if="displayBtnAddFav">DISPLAY WHEN TRUE</p>
<p ng-if="!displayBtnAddFav">DISPLAY WHEN FALSE</p>
</ion-item>`,
"controller":function($scope){
//TODO
}
}
};
所有文件都被正确引用。我的指令显示在视图中,但 "displayBtnAddFav" 值未正确解释。 "DISPLAY WHEN TRUE"
一直显示
我试过了:
- 调用带有 displayBtnAddFav 的指令="false"
- 使用 displayBtnAddFav=false 调用指令
- 用字符串("a" 或 "b")替换布尔值并使用 ng-if="displayBtnAddFav==='a'"
一切都没有按预期进行,我似乎别无选择。你们中有人看到我做错了什么吗?
所以我认为这里的问题是范围绑定:
根据 angular 文档:& bindings are ideal for binding callback functions to directive behaviors
。 (https://docs.angularjs.org/guide/directive)
不同的绑定适用于不同的场景。尝试将其从 &
更改为 =
。这应该允许 angular 解释您试图正确传递的布尔值。
const FilmDir = function(){
return {
"restrict":"E",
"scope":{
"movie" :"=",
"displayBtnAddFav" :"="
},
"template":`
<ion-item>
<p ng-if="displayBtnAddFav">DISPLAY WHEN TRUE</p>
<p ng-if="!displayBtnAddFav">DISPLAY WHEN FALSE</p>
</ion-item>`,
"controller":function($scope){
//TODO
}
}
};
非常感谢凯尔的意见。
经过更多测试,尽管医生告诉我的内容,您似乎是对的。
我意识到该指令不喜欢 "camelCase" 参数的另一个关键点:我必须为此将 displayBtnAddFav 更改为 displaybtnaddfav才能正常工作。
我正在复习旧的 classes 并尝试完成我以前无法完成的练习。这个 class 在 Ionic1 中,使用 Angular1。
我有一个使用两个参数的指令;第一个是要显示数据的对象,第二个是hide/show显示中某些元素的参数
这是实现控制器的视图:
<ion-list>
<film-directive
ng-repeat="tmpMovie in myController.movieList"
movie="tmpMovie"
displayBtnAddFav="false"
></film-directive>
</ion-list>
这里是指令结构:
const FilmDir = function(){
return {
"restrict":"E",
"scope":{
"movie" :"=",
"displayBtnAddFav" :"&"
},
"template":`
<ion-item>
<p ng-if="displayBtnAddFav">DISPLAY WHEN TRUE</p>
<p ng-if="!displayBtnAddFav">DISPLAY WHEN FALSE</p>
</ion-item>`,
"controller":function($scope){
//TODO
}
}
};
所有文件都被正确引用。我的指令显示在视图中,但 "displayBtnAddFav" 值未正确解释。 "DISPLAY WHEN TRUE"
一直显示
我试过了:
- 调用带有 displayBtnAddFav 的指令="false"
- 使用 displayBtnAddFav=false 调用指令
- 用字符串("a" 或 "b")替换布尔值并使用 ng-if="displayBtnAddFav==='a'"
一切都没有按预期进行,我似乎别无选择。你们中有人看到我做错了什么吗?
所以我认为这里的问题是范围绑定:
根据 angular 文档:& bindings are ideal for binding callback functions to directive behaviors
。 (https://docs.angularjs.org/guide/directive)
不同的绑定适用于不同的场景。尝试将其从 &
更改为 =
。这应该允许 angular 解释您试图正确传递的布尔值。
const FilmDir = function(){
return {
"restrict":"E",
"scope":{
"movie" :"=",
"displayBtnAddFav" :"="
},
"template":`
<ion-item>
<p ng-if="displayBtnAddFav">DISPLAY WHEN TRUE</p>
<p ng-if="!displayBtnAddFav">DISPLAY WHEN FALSE</p>
</ion-item>`,
"controller":function($scope){
//TODO
}
}
};
非常感谢凯尔的意见。
经过更多测试,尽管医生告诉我的内容,您似乎是对的。 我意识到该指令不喜欢 "camelCase" 参数的另一个关键点:我必须为此将 displayBtnAddFav 更改为 displaybtnaddfav才能正常工作。