Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update label when options are changing #187

Open
bjarnef opened this issue Aug 13, 2018 · 3 comments
Open

Update label when options are changing #187

bjarnef opened this issue Aug 13, 2018 · 3 comments

Comments

@bjarnef
Copy link

bjarnef commented Aug 13, 2018

I have a dropdown with options, where the options are depending on another dropdown.
When I select a value from a dropdown with transport options it get some different travel length, where part of the label is night (nætter) if the transport method is self-drive (kør-selv) otherwise days (dage).

image

image

But when changing to another transport option with the same values it doesn't update the label although the options are correct, but it does update the labels if the values are different.

image

I had the same issue with a regular select and angular bindings if the bindings were oneway, but if the bindings were twoway it did work. So I am wondering if this is using oneway binding on this?

Is there another way to ensure the label is updated?

In the last example the option 8 dage is selected, but the filter option label doesn't match this.

@lordfriend
Copy link
Owner

It should update your selected labels but depends on how you use this directive. This directive clones your custom content beneath into the drop-down button. and try to compile the template ( if your using a nya-bs-option directive to generate option).

@bjarnef
Copy link
Author

bjarnef commented Aug 17, 2018

I first tried without title-tpl attribute, but it then had an empty value and didn't seems to fallback to config settings, when the search cookie (an object) was empty.

var app = angular.module("myApp");

app.requires.push('nya.bootstrap.select');

app.config(['nyaBsConfigProvider', function (nyaBsConfigProvider) {
    nyaBsConfigProvider.setLocalizedText('da-dk', {
        defaultNoneSelection: 'Vælg...',
        noSearchResult: 'Intet resultat',
        numberItemSelected: '%d element(er) valgt',
        selectAll: 'Vælg alle',
        deselectAll: 'Fravælg alle'
    });
    nyaBsConfigProvider.useLocale('da-dk');
}]);
<ul class="nya-bs-select show-menu-arrow ng-cloak" data-ng-model="search.dage" data-size="15" deep-watch="true" data-ng-change="updateCustomDropdownDays(search)" title-tpl="<span>{{getTravelDaysLabel(dageObj, search.dage, search.transport, '@Umbraco.GetDictionaryValue("Days")', '@Umbraco.GetDictionaryValue("nights")')}}</span>">
     <li nya-bs-option="dage in dageObj" data-value="dage">
          <a>{{((search.transport != 'DKK' ? addADay(dage) : dage) + ' ' + (search.transport != 'DKK' ? '@Umbraco.GetDictionaryValue("Days")' : '@Umbraco.GetDictionaryValue("nights")'))}}</a>
     </li>
</ul>

To solve this I use the title-tpl:

$scope.getTravelDaysLabel = function (arr, days, transport, daysLabel, nightsLabel) {
        var name = "Vælg...";
        angular.forEach(arr, function (value, key) {
            if (value === days) {
                var firstPart = (transport != 'DKK' ? $scope.addADay(days) : days);
                var secondPart = (transport != 'DKK' ? daysLabel : nightsLabel);
                name = firstPart + ' ' + secondPart;
            }
        });
        return name;
    };

Although all of the parameters in the function getTravelDaysLabel return the correct values based on transport code is DKK or not, it doesn't update the special title label, when the actual values are not changed (only the option values are updated).

So e.g. with values like 3, 4, 5 and transport code DKK, then the options would be:
"3 nætter (nights)", "4 nætter (nights)", "5 nætter (nights)", but for other transport codes, it would use the same values, but the labels have +1 in the number: "4 dage (days)", "5 dage (days)", "6 dage (days)".

So the options are updated correct, but not the label/title.

image

image

Does it somewhere has a oneway binding on the filter option label?

@lordfriend
Copy link
Owner

maybe angular 1.x cannot execute functions in evaluate brackets twice? when in oneway binding, it means it can only observe an expression value changes...
An advice is to simplify your option expression like using a temporary variable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants