Оператор if останавливается, как только он встречает действительный оператор.
Не нужно, если здесь, вы можете просто вставить входные значения вместе:
library(shiny)
server <- shinyServer( function(input, output) {
output$whatever<-renderText( {
vals <- paste(input$test, collapse = " ")
paste("Your ideal(s) value(s) are", vals)
}
)
}
)
ui <- shinyUI(fluidPage(
headerPanel(title="pratice"),
sidebarLayout(
sidebarPanel(
selectInput("test",label="Test",multiple = TRUE,
choices=list("a","b","c","d"),
)),
mainPanel(
textOutput("whatever")
)
)
)
)
shinyApp(ui, server)
Это будет применять новый сопоставитель ко всему вашему приложению:
dirty-error-state.matcher.ts
import {FormControl, FormGroupDirective, NgForm } from '@angular/forms';
import {ErrorStateMatcher} from '@angular/material/core';
export class DirtyErrorStateMatcher implements ErrorStateMatcher {
isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
return !!(control && control.invalid && (control.dirty));
}
}
app.module.ts
import { DirtyErrorStateMatcher } from 'your-path-here';
import { ErrorStateMatcher } from '@angular/material/core';
@NgModule({
...
providers: [{
provide: ErrorStateMatcher,
useClass: DirtyErrorStateMatcher
}]
})
вы можете сделать это следующим образом -
<mat-form-field appearance="outline">
<mat-label>Password</mat-label>
<input matInput
type="password"
placeholder="Password"
name='Password'
[ngModel]='model.password'
(ngModelChange)="onChange($event, password)"
#password='ngModel'
[minlength]='requiredLength'
[pattern]="passwordPattern"
required>
<mat-error *ngIf="password.errors?.pattern"">
Password must be 8 characters long, one numeric, one special character....
</mat-error>
</mat-form-field>
и в вашем component.ts добавить метод onChange () -
onChange($event, password){
this.model.password = $event;
if(!password.control.touched){
password.control.markAsTouched();
}
}
Если вы хотите запускать валидацию при каждом нажатии клавиши пользователем, вы должны использовать небольшой обходной путь. Я предлагаю вам использовать FormControl
, который затем позволит вам установить валидатор непосредственно на этом элементе управления, а также прослушать изменения, испускаемые valueChanges
, чтобы пометить FormControl
как затронутые для запуска проверки (возможно, есть лучший решение этого?).
См. Следующий стекблиц . Валидация выполняется с помощью Validators.pattern
(минимум 8 символов, как минимум одна буква, одно число и один специальный символ), поэтому больше не требуется обязательный или минимальный валидатор длины.