【问题标题】:Why doesn't my directive recognize its parameters?为什么我的指令不能识别它的参数?
【发布时间】:2019-03-26 07:16:15
【问题描述】:

我正在复习旧课程,并尝试完成以前无法完成的练习。此类在 Ionic1 中,使用 Angular1。

我有一个使用两个参数的指令;第一个是要显示数据的对象,第二个是在显示中隐藏/显示某些元素的参数

这是实现控制器的视图:

<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”值。 “当真时显示”

始终显示

我试过了:

  • 使用 displayBtnAddFav="false" 调用指令
  • 使用 displayBtnAddFav=false 调用指令
  • 将布尔值替换为字符串(“a”或“b”)并使用 ng-if="displayBtnAddFav==='a'"

没有按预期工作,我似乎没有选择。你们有谁知道我做错了什么吗?

【问题讨论】:

    标签: angularjs ionic-framework angularjs-directive


    【解决方案1】:

    所以我认为这里的问题是范围绑定:

    根据角度文档:&amp; bindings are ideal for binding callback functions to directive behaviors。 (https://docs.angularjs.org/guide/directive)

    不同的绑定适用于不同的场景。尝试将其从 &amp; 更改为 =。这应该允许角度解释您尝试正确传递的布尔值。

    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
            }
        }
    };
    

    【讨论】:

      【解决方案2】:

      非常感谢凯尔的意见。

      经过更多测试,尽管医生告诉我什么,但您似乎是对的。 另一个关键点我意识到该指令不喜欢“camelCase”参数:我必须将 displayBtnAddFav 更改为 displaybtnaddfav 才能正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        • 1970-01-01
        • 1970-01-01
        • 2010-10-19
        • 2019-05-08
        相关资源
        最近更新 更多