私はAngularJSを初めて使用し、ファイルを自分のLaravel駆動型Webサイトにアップロードできるようにする簡単なアプリを作成しようとしています。アップロードしたアイテムのプレビューをフォームに表示したいそのため、これを達成するためにng-modelを使用していて、次のことに遭遇しました。
基本的なbootstrapスタイリングの入力があり、AngularJSテンプレートにカスタムブラケットを使用しています(前述のように、ブレードシステムでLaravelを使用しているため) )そして、入力からスペースを削除して(入力すると)、ダッシュで置き換える必要があります。
<div class="form-group"><input type="text" plaeholder="Title" name="title" class="form-control" ng-model="gnTitle" /></div>
そして私はこれを持っています:
<a ng-href="/art/[[gnTitle | spaceless]]" target="_blank">[[gnTitle | lowercase]]</a>
そして、私のapp.jsは次のようになります。
var app = angular.module('neoperdition',[]);
app.config(function($interpolateProvider){
$interpolateProvider.startSymbol('[[').endSymbol(']]');
});
app.filter('spaceless',function(){
return function(input){
input.replace(' ','-');
}
});
次のエラーが表示されます:TypeError:未定義のプロパティ 'replace'を読み取れません
フィルタリングする前に値を定義する必要があることは理解していますが、正確に定義する場所がわかりません。また、定義した場合、プレースホルダーを変更したくありません。
フィルターに欠けているものはほとんどありません。まず、新しい文字列を返す必要があります。次に、正規表現が正しくありません。すべてのスペース文字を置き換えるには、グローバル修飾子を使用する必要があります。最後に、最初にモデルの値がundefined
になる可能性があるため、文字列が定義されているかどうかも確認する必要があるため、.replace
on undefinedはエラーをスローします。
すべて一緒に:
app.filter('spaceless',function() {
return function(input) {
if (input) {
return input.replace(/\s+/g, '-');
}
}
});
Braviは、eaxample {{X | replaceSpaceToDash}}
app.filter('replaceSpaceToDash', function(){
var replaceSpaceToDash= function( input ){
var words = input.split( ' ' );
for ( var i = 0, len = words.length; i < len; i++ )
words[i] = words[i].charAt( 0 ) + words[i].slice( 1 );
return words.join( '-' );
};
return replaceSpaceToDash;
});