2016-04-05 9 views
3

私はこのようなVUEディレクティブでlodash方法(_.isEmpty)を使用しようとしている:VUEディレクティブで使用グローバル関数

<div class="post" v-for="post in posts"></div> 
    ... 
    <div class="comments" v-if="! _.isEmpty(post.comments)"> 
     <div class="comment" v-for="comment in post.comments"></div> 
    </div> 
    ... 
</div> 

が、次のエラーを取得:

Uncaught TypeError: Cannot read property 'isEmpty' of undefined

それはVUEらしいです現在のスコープ内で_.isEmptyメソッドを探しています。この場合、グローバル関数をどのように呼び出すべきですか?

答えて

3

あなたは、テンプレート内の現在のVueインスタンス/コンポーネントのアクセスのみ機能することができます:

  • データ小道具
  • 方法

いいえ "のサードパーティ" のコードができ

  • を走る

    methods: { 
        isEmpty: function (arr) { return _.isEmpty(arr)} 
    } 
    

    を、代わりにテンプレートでこのメソッドを使用します:

    だから、あなたはlodash方法にプロキシにVueのコンポーネントのメソッドを作成しなければならない理由だけで

    <div class="comments" v-if="! isEmpty(post.comments)"> 
    
  • +0

    vue.jsの新人として、それは私の心を壊しました! –

    +0

    これは意図的です。ビジネスロジックはテンプレートに属していません。それはデバッグとリファクタリングの悪夢です。もちろん、甘い少し小さなロダシュ機能はそれほど害はありませんが、システムは甘い小さなロダシュ機能のために逸脱することはできません。つまり、おそらくインスタンスメソッドとしてVueにlodashを注入することができます: 'Vue.prototype._ = _'は、' _'としてビューにアクセスできるはずですが、推奨しません。 –

    +0

    それは理にかなっています、説明のおかげで! –

    2

    あなたのVueコンポーネントに_を追加してください:

    data(){ 
        return { 
        _:require('lodash') //or however you include it. maybe just window._ 
        } 
    } 
    

    次にアクセス可能になります。 _が有効なオブジェクトキーである場合は肯定的ではないため、必要に応じてloまたはlodashと呼ぶこともできます。

    また、コメントが配列であると仮定すると、v-if='post.comments.length'を使用しても問題はありません。あなたがすでにそれが配列であることが分かっているなら、Lo-dashは素晴らしいですが、不要です。

    関連する問題