我想每次提交表单时都生成一个格式为 'ZXCVBN' 的随机字符串

I want to generate a random string of format 'ZXCVBN' every time on form submission

我想在每次提交表单时生成一个格式为 'ZXCVBN' 的随机字符串,并分配给 add-event.comonent.ts 文件中事件数组的 'code' 参数。我应该怎么做?

代码必须恰好由 6 个大写随机字母组成。

添加-event.component.ts:-

export class AddEventComponent implements OnInit {

  event: Event = {
    code: '',
    name:'',
    password:'',
    pollCat:''
  }
  constructor(private eventService : EventsService) { }

  ngOnInit() {
  }

  onSubmit()
  {
    if(this.event.name !="" && this.event.password !="")
    {
      this.eventService.addEvent(this.event);
      this.event.name = '';
      this.event.password = '';
    }
  }
}

events.service.ts:-

  @Injectable({
  providedIn: 'root'
})
export class EventsService {

  eventsCollection : AngularFirestoreCollection<Event>;
  events: Observable<Event[]>;

  constructor(public afs: AngularFirestore) { 

    this.eventsCollection = this.afs.collection<Event>('Events');
    this.events = this.eventsCollection.snapshotChanges().pipe(
    map(changes => {
      return changes.map(a => {
        const data = a.payload.doc.data() as Event;
        data.id = a.payload.doc.id;
        return data;
      })
    })); 
  }

  getEvents()
  {
    return this.events;
  }

  addEvent(event: Event)
  {
    this.eventsCollection.add(event);
  }
}

<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js">
  function generateRandomString(length) {
    var text = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

    for (var i = 0; i < length; i++)
      text += possible.charAt(Math.floor(Math.random() * possible.length));

    return text;
  }

</script>

这是一个解决方案,将其添加到您的代码中

function generateCode(length) {
       var result           = '';
       var characters       = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
       var charactersLength = characters.length;
       for ( var i = 0; i < length; i++ ) {
          result += characters.charAt(Math.floor(Math.random() * charactersLength));
       }
       return result;
}
console.log(generateCode(6))    

[0,1,2,3,4,5,6].map(x=>'ABCDEFGHIJKLMNOPQRSTUVZ'
               .substr(Math.floor(23*Math.random()),1))
               .join('')

stackblitz

这应该是一个简单的方法:

let randomString: string = ""

const alphabetsString: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

    for (let i = 0; i < 6; i++) {
        let randomNum: number =  Math.floor(Math.random() * (25 - 0 + 1)) + 0;

        let newChar = alphabetsString.charAt(randomNum)

        randomString = randomString.concat(newChar)
    }

//Return the value as per your program. I have used console.log(randomString)

基本上我有一串字母,我使用了一个运行 6 次的循环。每次我得到一个 0 到 25 之间的随机数 [都包括在内] 并使用 charAt() 找到该位置的字符。所有的字母组合成一个字符串。