didReceiveAttrs() {
    let { disabledWhen } = this;
    if (disabledWhen !== undefined) {
      this.set('disabled', disabledWhen);
    }
    // @ts-ignore
    let { params } = this;
    if (!params || params.length === 0) {
      assert(
        'You must provide at least one of the `@route`, `@model`, `@models` or `@query` argument to `<LinkTo>`.',
        !(
          this.route === UNDEFINED &&
          this.model === UNDEFINED &&
          this.models === UNDEFINED &&
          this.query === UNDEFINED
        ),
      );
      let { _models: models } = this;
      if (models.length > 0) {
        let lastModel = models[models.length - 1];
        if (
          typeof lastModel === 'object' &&
          lastModel !== null &&
          lastModel.isQueryParams
        ) {
          this.query = lastModel.values;
          models.pop();
        }
      }
      return;
    }
    let hasBlock = this[HAS_BLOCK];
    params = params.slice();
    // Process the positional arguments, in order.
    // 1. Inline link title comes first, if present.
    if (!hasBlock) {
      this.set('linkTitle', params.shift());
    }
    // 2. The last argument is possibly the `query` object.
    let queryParams = params[params.length - 1];
    if (queryParams && queryParams.isQueryParams) {
      this.set('query', params.pop().values);
    } else {
      this.set('query', UNDEFINED);
    }
    // 3. If there is a `route`, it is now at index 0.
    if (params.length === 0) {
      this.set('route', UNDEFINED);
    } else {
      this.set('route', params.shift());
    }
    // 4. Any remaining indices (if any) are `models`.
    this.set('model', UNDEFINED);
    this.set('models', params);
    runInDebug(() => {
      // @ts-ignore
      params = this.params.slice();
      let equivalentNamedArgs = [];
      let hasQueryParams = false;
      // Process the positional arguments, in order.
      // 1. Inline link title comes first, if present.
      if (!hasBlock) {
        params.shift();
      }
      // 2. The last argument is possibly the `query` object.
      let query = params[params.length - 1];
      if (query && query.isQueryParams) {
        params.pop();
        hasQueryParams = true;
      }
      // 3. If there is a `route`, it is now at index 0.
      if (params.length > 0) {
        params.shift();
        equivalentNamedArgs.push('`@route`');
      }
      // 4. Any remaining params (if any) are `models`.
      if (params.length === 1) {
        equivalentNamedArgs.push('`@model`');
      } else if (params.length > 1) {
        equivalentNamedArgs.push('`@models`');
      }
      if (hasQueryParams) {
        equivalentNamedArgs.push('`@query`');
      }
      if (equivalentNamedArgs.length > 0) {
        let message =
          'Invoking the `<LinkTo>` component with positional arguments is deprecated.';
        message += `Please use the equivalent named arguments (${equivalentNamedArgs.join(', ')})`;
        if (hasQueryParams) {
          message += ' along with the `hash` helper';
        }
        if (!hasBlock) {
          message += " and pass a block for the link's content.";
        }
        message += '.';
        deprecate(message, false, {
          id: 'ember-glimmer.link-to.positional-arguments',
          until: '4.0.0',
          for: 'ember-source',
          url: 'https://deprecations.emberjs.com/v3.x#toc_ember-glimmer-link-to-positional-arguments',
          since: {
            available: '3.26.0-beta.1',
            enabled: '3.26.0-beta.1',
          },
        });
      }
    });
  }
The default href value to use while a link-to is loading.
      Only applies when tagName is 'a'
  
      @property loadingHref
      @type String
      @default #
      @private