braintree-web npmモジュールをAngularJSで使用しようとしています。これは、次のコマンドを使用してテンプレートに含めるとエラーが発生するためです。
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
コントローラー「BillingController」を使用してテンプレートにルーティングするために使用するbillingという状態があります。 braintree-webとmyscript.jsを挿入できるようにしたい:
<script>
braintree.setup(
// Replace this with a client token from your server
clientToken,
"dropin", {
container: "payment-form",
form: "checkout",
});
</script>
助けてください。これどうやってするの?
[〜#〜]編集[〜#〜]:
現在、これは私の一番下に配置されています
<!-- braintree sdk -->
<script src="https://js.braintreegateway.com/v2/braintree.js"></script>
<!-- braintree setup -->
<script>
var clientToken = removed;
braintree.setup(
// Replace this with a client token from your server
clientToken,
"dropin", {
container: "payment-form",
form: "checkout",
});
</script>
これらは私が得ているエラーです:
ブレーンツリースクリプトがロードされていないように見えます(?)
助けてくれてありがとう
このURLからbraintree-web
を使用しますか? https://github.com/jeffcarp/braintree-angular
これはAngular専用のモジュールです。次に、app.js
のようなファイルを作成し、次のコードを貼り付ける必要があります。
var yourApp = angular
.module('yourApp', ['braintree-angular'])
.constant('clientTokenPath', '/path-or-url-to-your-client-token');
例えば:
(function () {
'use strict';
var app = angular.module('yourModuleName', [
'braintree-angular'
]);
app.constant('clientTokenPath', '/path-or-url-to-your-client-token');
app.config(['$interpolateProvider', function ($interpolateProvider) {
$interpolateProvider.startSymbol('[[');
$interpolateProvider.endSymbol(']]');
}]);
}());
Controller.jsは次のようになります。
(function() {
'use strict';
angular
.module('yourModuleName')
.controller('DashboardCtrl', DashboardCtrl);
DashboardCtrl.$inject = ['$scope', '$braintree'];
function DashboardCtrl($scope, $braintree) {
var client;
$scope.creditCard = {
number: '',
expirationDate: ''
};
var startup = function() {
$braintree.getClientToken().success(function(token) {
client = new $braintree.api.Client({
clientToken: token
});
});
};
$scope.payButtonClicked = function() {
// - Validate $scope.creditCard
// - Make sure client is ready to use
client.tokenizeCard({
number: $scope.creditCard.number,
expirationDate: $scope.creditCard.expirationDate
}, function (err, nonce) {
// - Send nonce to your server (e.g. to make a transaction)
});
};
startup();
}
}());
app.js
は、残りのコントローラー、ファクトリ、サービスの前、angular.jsおよびbraintree.jsライブラリの後に含める必要があることに注意してください。
@ danday74を拡張するために、このようなbrowserifyを使用しています。
一言で言えば、これは私たちがそれを使用する方法です。
したがって、 Browserify クライアントコードにNodeJsスタイルrequire
を使用できるnodejsCLIを認識していない場合。これにより、適切に構造化されたモジュラークライアントコードを記述し、それを単一のファイルに組み込んでページに含めることができます。もう1つの利点は、すべてのファイルがその単一のファイルにスコープされることです。したがって、偶発的なグローバルはもうありません(厳密モードを使用していない場合)。ファイルから公開されるのは、明示的にエクスポートするものだけです。
CLIであるため、コマンドラインで使用できるようにグローバルにインストールする必要があります。
npm install -g browserify
次に、コマンドラインから簡単に実行するには、
browserify main.js > output.js
あなたのページにそれを含めてください
<script src="output.js"></script>
リンティングやサスのような他のことをするのと同じように、私たちはpackage.json
でそれを個人的にエイリアスします。ここに例があります
{
"name": "some app",
"scripts": {
"build:js": "browserify src/index.js > dist/built.js",
"build:css": "node-sass sass/main.scss dist/built.css",
"build": "npm run build:js && npm run build:css"
}
}
npm run build
を実行するだけで、sassとjsが構築されます。
Browserifyが行うことは、ファイルを再帰的にトラバースしてrequire
呼び出しを探し、次にそのファイルに移動して繰り返します。検索パスの一部として、node_modules
フォルダーを検索します。これが、npm
を介してインストールされたモジュールを含めることができる理由です。
これが小さな例です
//In a file called data.js located in same folder as main.js
module.exports = [1, 2, 2, 3, 4, 5, 5, 6];
//in a file called main.js
var unique = require('uniq'),
data = require('./data');
console.log(unique(data)); //[1, 2, 3, 4, 5, 6]
これが行うことは、最初にNPMを介してインストールされたuniq
と呼ばれるモジュールを探すことです(相対パスまたは絶対パスがないため)。次に、同じフォルダにあるdata.js
という独自のファイルを探します。
いつこれをbrowserify main.js > out.js
で構築しますか
これがbrowserifyとは何か、そしてクライアントにNPM
モジュールを含めたいときに構造を管理することがどのように役立つかを説明するのに役立つことを願っています。特にbrowserifyを使用しない大規模なアプリケーションがある場合、これがすべてに適しているわけではないことは承知していますが、今ではこのようなビルドツールを使用してモジュラーコードを記述しています。
私はあなたの最高の希望はbrowserifyだと思います。自分で試したことはありませんが、その背後にある考え方は、NodeJSコードをブラウザーが理解できる形式に変換することだと思います。
npm i braintree
npm i browserify
たぶん小さなテストを試して、それが機能するかどうかを確認しますか?