Q:

Why does a component duplicate itself every time I enter the route?

I'm working on my first ember app and I'm having trouble with a component. I have a route that load several components. Each loads with the following paradigm:
{{#each someList as |item|}}
<MyComponent @item={{item}} />
{{/each

It works great when entering the route. However, every time I leave the page and return without refreshing, one of the components will render again. 
I'm am new to Ember. I've tried using component lifecycle hooks to force the rerender with no success. I've also tried setting a variable to check if the container is already loaded, but it resets when leaving the page.  
Not working:
{{#each this.weapons as |weapon|}}
    <CharacterWeaponDetail @weapon={{weapon}} />
{{/each}}

Working:
{{#each (this.skills) as |skill| }}
    <SkillDetail
    @skill={{skill}} 
    @character={{charactersheet}} 
    @chrSkills={{chrSkills}} 
    @charParam={{charactersheet.id}} 
    @action="filter"
    @unUsedSP={{this.unUsedSP}}
    @realtimeSkillPoints={{realtimeSkillPoints}}
    @filter={{charactersheet.profession.name}}/> 
{{/each}} 

Say each component loads twice. On first render the results look like this:
<CharacterWeaponDetail />
<CharacterWeaponDetail />

<SkillDetail />
<SkillDetail />

This is the expected behavior. However if I leave the route using a {{link-to}} and return without a full refresh, the results look like this:
<CharacterWeaponDetail />
<CharacterWeaponDetail />
<CharacterWeaponDetail />
<CharacterWeaponDetail />

<SkillDetail />
<SkillDetail />

Every time the page loads <CharacterWeaponDetail /> will duplicate again. How can I stop this from happening.
Edit
Full route.
import Route from '@ember/routing/route';
import { hash } from 'rsvp';
import { inject as service } from '@ember/service';
import EmberObject from '@ember/object';

export default Route.extend({
  totalSpSpent: service('total-skill-points-spent'),
  weapons: [],

  async model(params){
    let charactersheet = await this.store.findRecord('charactersheet', params.charactersheet_id );
    let characterWeapons = charactersheet.weaponsets.sets;
    var Weapon = EmberObject.extend({
      fromPlayer: null,
      fromWeapon: null
    });

    for (let i = 0; i < characterWeapons.length; i++) {
      let weapon = Weapon.create();
      let weapons = this.get('weapons');

      let calcWeaponInfo = this.store.findRecord('weapons', characterWeapons[i].weaponID);

      weapon.fromPlayer = characterWeapons[i];
      weapon.fromWeapon = calcWeaponInfo;

      weapons.push(weapon);
      this.set('weapons', weapons);
    }

    return hash({
      charactersheet: charactersheet,
      skills: this.store.findAll('skill'),
      skillcategories: this.store.findAll('skillcategories'),
      skillsubcategories: this.store.findAll('skillsubcategories'),
      chrSkills: [],
      realtimeSkillPoints: null,
      weapons: this.get('weapons')
    })      
  },

  setupController(controller, models){ 
    controller.set('chrSkills', models.chrSkills);
    controller.set('weapons', models.weapons);
    controller.set('realtimeSkillPoints', models.realtimeSkillPoints);
    controller.set('charactersheet', models.charactersheet);
    controller.set('skills', models.skills);
    controller.set('skillcategories', models.skillcategories);
    controller.set('skillsubcategories', models.skillsubcategories);
  },

  afterModel(){
    let totalSpSpent = this.get('totalSpSpent');
    totalSpSpent.clear();
  },
});

Based on your input, I think the problem is I'm returning weapons into an object that I'm then sending all the object's to the component in an array. With the skills I'm returning the ember promise. I'll change that and report back. 
The controller only shows a few modals that are on the page. 

A:

The model() hook of a Route is executed each time the route is entered. You are creating new Weapon on each execution. These Weapon objects are pushed to weapons property of the route. Routes are singletons in ember.js. On each reentering that routes more Weapon objects are pushed to weapons property.
You could fix the bug by not storing the weapons as a property of route but initialize a new array each time the model() hook is executed. You should replace this code in your model hook
for (let i = 0; i < characterWeapons.length; i++) {
  let weapon = Weapon.create();
  let weapons = this.get('weapons');

  // ...

  weapons.push(weapon);
}

with
let weapons = [];
for (let i = 0; i < characterWeapons.length; i++) {
  let weapon = Weapon.create();

  // ...

  weapons.push(weapon);
}

You don't need to store weapons on route at all. And you shouldn't replace the property on each iteration of for loop for sure.

