/**
  * @inheritdoc
  */
 public static function error($model, $attribute, $options = [])
 {
     $attribute = static::getAttributeName($attribute);
     $tag = isset($options['tag']) ? $options['tag'] : 'div';
     unset($options['tag'], $options['formName']);
     // TODO: manage encode
     /*$encode = !isset($options['encode']) || $options['encode'] !== false;
       unset($options['encode']);*/
     $validators = $model->getActiveValidators($attribute);
     // Get all ng-message directives from the model
     $ngMessages = [];
     foreach (AngularValidator::getAngularValidators($validators) as $validator) {
         $ngMessages[] = static::ngMessages($validator, $model, $attribute);
     }
     $ngMessages[] = Html::tag('div', null, ['us-server-message' => true]);
     // Wrap up all ngMessages in a ng-messages directive
     $formName = $model->formName();
     $formNgModel = Html::getFormNgModel($model, $attribute);
     // Compute error showing condition
     $errorCondition = [];
     if (!isset($options['ifDirty']) || $options['ifDirty']) {
         $errorCondition[] = $formNgModel . '.$dirty';
         unset($options['ifDirty']);
     }
     if (!isset($options['ifTouched']) || $options['ifTouched']) {
         $errorCondition[] = $formNgModel . '.$touched';
         unset($options['ifTouched']);
     }
     $errorCondition = implode(' && ', $errorCondition);
     $ngMessages = Html::tag('div', implode("\n", $ngMessages), ['ng-messages' => $formNgModel . '.$error', 'ng-if' => '(' . $errorCondition . ')  || ' . $formName . '.$submitted']);
     return Html::tag($tag, $ngMessages, $options);
 }