HTML:

<ya-template-layout ya-key="templateOne" ya-overrides="overrides">
    <div style="margin: 10px;">
        <b>$[properties.name]</b><br />
        <i id="count"></i>
        <button id="counter-button"> +1 </button>
    </div>
</ya-template-layout>
<ya-map ya-zoom="10" ya-center="[37.62708,55.650625]">
    <ya-geo-object ya-source="point" ya-options="{balloonContentLayout:'templateOne',balloonPanelMaxMapArea: 0}"></ya-geo-object>
</ya-map>
    

javascript:

var counter=0;
$scope.overrides={
    build: function () {
        // Сначала вызываем метод build родительского класса.
        console.log('build');
        var BalloonContentLayout = templateLayoutFactory.get('templateOne');
        BalloonContentLayout.superclass.build.call(this);
        // А затем выполняем дополнительные действия.
        angular.element(document.getElementById('counter-button')).bind('click', this.onCounterClick);
        angular.element(document.getElementById('count')).html(counter);
    },

    // Аналогично переопределяем функцию clear, чтобы снять
    // прослушивание клика при удалении макета с карты.
    clear: function () {
        // Выполняем действия в обратном порядке - сначала снимаем слушателя,
        // а потом вызываем метод clear родительского класса.
        angular.element(document.getElementById('counter-button')).unbind('click', this.onCounterClick);
        var BalloonContentLayout = templateLayoutFactory.get('templateOne');
        BalloonContentLayout.superclass.clear.call(this);
    },

    onCounterClick: function () {
        angular.element(document.getElementById('count')).html(++counter);
        if (counter == 5) {
            alert('Вы славно потрудились.');
            counter = 0;
            angular.element(document.getElementById('count')).html(counter);
        }
    }
};
$scope.point = {
    geometry:{
        type:'Point',
        coordinates:[37.62708,55.650625]
    },
    properties: {
        name: 'Считаем'
    }
};
$[properties.name]