> For the complete documentation index, see [llms.txt](https://docs.activejs.dev/activejs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.activejs.dev/activejs/utilities/selection.md).

# Selection

[Selection](https://api.activejs.dev/classes/selection.html) is a simple construct that operates on a nested property in the non-primitive Units' value, i.e.: [ListUnit](/activejs/fundamentals/units/listunit.md), [GenericUnit](/activejs/fundamentals/units/genericunit.md), and [DictUnit](/activejs/fundamentals/units/dictunit.md).

Selection offers the ability to access and observe a nested property at a certain path in a Unit's value.

### Make a Selection

```typescript
// create a Unit
const preferencesUnit = new DictUnit({initialValue: 
  {color: 'blue', music: 'EDM', game: 'GTA5'}
})

// make a selection
// the 'select' method takes path as it's params
const musicPreference = preferencesUnit.select('music')
```

### Static Value Access

After creating a Selection object, we can access the value at the selected path anytime, without worrying if the value still exists or not.

```typescript
// access the value at the selected path
console.log(musicPreference.value())
// logs 'EDM' immediately
```

### Reactive Value Access

To observe the value over time we can make an Observable at the selected path, and subscribe to it.

```typescript
// create an Observable
const musicPreference$ = musicPreference.asObservable()

// subsribe for reactive access
musicPreference$.subscribe(value => console.log(value))
// logs 'EDM' immediately, and
// will log whenever the value at the selected path changes
```
