2016-07-22 4 views
1

ES6の矢印機能を使用するVue.jsコードがあります。しかし、明らかにSafari(これはOSX上のChromeのように見える)はこれを好まない。コードは次のとおりです。このES6コードをSafari互換にするにはどうすればよいですか?

fetchItemCount: function(){ 
       this.$http.get('/api/fetchItemCount') 
        .then(response => { 
         this.itemCount = response.data; 
        }) 
        .catch(response => { 

        }); 
      }, 

私は矢印の構文を使用するいくつかの関数を持っています。どのように私はそれらを使用することを避けるためにそれらを書き直すことができますか?他の人がそのようバベルとしてtranspilerを使用して述べてきたように

+0

あなたはhttps://babeljs.io/を使ってコードをES5に移植することができます –

+0

Safari(10)の次のバージョンでは、矢印機能やES6の他の部分もサポートされます。しかし、古いブラウザでは、ES5コードが必要です。これは、上記のコメントに記載されているように、バベルのようなトランスパイライザーを使用して移送することができます。 – nils

+0

私の編集を参照してください - 私はバベルを使用しようとしましたが、それはエラーを導入します。 – flurpleplurple

答えて

3

私は、コードをtranspileするバベルを使って試してみましたが、それはエラー(未定義またはnull参照のプロパティを設定できません「ヴュー」)を導入しているようだ

を行うだろうトリックですが、それは矢印機能を持たないように見える方法です。

矢印機能は、私たちは、単に新しい変数に外側のスコープで thisを割り当て、内部でそれを使用する必要があることを再現するために、あなたは基本的にそれが宣言されていますどこの this範囲を保つ機能である与えるもの
fetchItemCount: function(){ 
    var that = this; 
    this.$http.get('/api/fetchItemCount') 
     .then(function(response) { 
      that.itemCount = response.data; 
     }) 
     .catch(function(response) { 

     }); 
}, 

関数。

コメントでLinusBorgが指摘したように、vue-resourceを使用する場合、ライブラリはthisが外側スコープに変更されるので、var that = this;部分を実行する必要はありません。これはvue-resourceリソースに特有ですが、一般的には約束どおりに行われていないため、通常は他のライブラリとはうまく動作しません。

+0

これは私が探していたものでした、ありがとう! – flurpleplurple

+1

あなたの説明は一般的には正しいですが、vue-resourceを使用する場合、 'that = this'クロージャは、コールバック関数をVMのスコープにバインドするため、unnessessaryです。 –

+0

知っておいてよかったですが、私は自分の答えをそのまま保つつもりです。なぜなら、外部コンテキストにバインドする約束の通常の動作ではないからです。私はそれをメモします! –

2

実際には、少なくとも手動でコードを書き直す必要があります。あなたができることは、あなたが与えた例のようにコードを書いておき、Babelのようなトランスピラーを使ってES6コードをES5に書き直すことです。

GulpGruntなどのタスクマネージャを使用すると、自分自身にほとんど透過的にすることができます。

タスクマネージャを使用する方法を理解する必要がある場合は、this articleをご覧ください。これはGulpの使い方を簡潔にまとめたものです。

これを読んだら、自動的にファイルを見て、いくつかのGulpスクリプトを通してコンテンツを合理化することが簡単に分かります。だからGulp Babel pluginを使って、この透明な作業を自動的に行います。例えば

const gulp = require('gulp'); 
const babel = require('gulp-babel'); 

gulp.task('transpile',() => { 
    return gulp.src('src/MY-VUE-SOURCE.js') 
     .pipe(babel({ 
      presets: ['es2015'] 
     })) 
     .pipe(gulp.dest('SOME_DESTINATION')); 
}); 

gulp.task('watch', function() { 
    gulp.watch(['src/**/*'], ['transpile']); 
}); 

あなたはそれを手動で停止するまで走り続けているゴクゴク時計を、実行した後、MY-VUE-SOURCE.jsに変更した内容が自動的にtranspiledされます。

+0

私はGulpを使用し、Bowerを使用しようとしました。しかし、私がBabelifiedコードを使用するように切り替えると、Vue.jsライブラリコードの開始時にエラーが発生し始めました。「未定義またはnull参照のプロパティ 'Vue'を設定できません。これはES2015 Babelプリセットを使用していました。 – flurpleplurple

+0

見てみましょう。 –

関連する問題