1

I am trying to make my input width respond to an AngularJS scope variable, by setting it's width conditionally with ng-style. I have gotten this to work beautifully with text-align, but for some reason it is not working with width...

The HTML:

<body ng-app="vfApp">
    <!--This works...  --> <input resize ng-style="{ 'width' : '100%' }" type="text"/>
    <!--This does not?!--> <input resize ng-style="{ 'width' : doResize ? '100%' : '10%' }" type="text"/>
</body>

The JS:

var vfApp = angular.module('vfApp', []);
vfApp.directive('resize', function () {
    return function ($scope) {
        $scope.doResize = false;
    };
});

EDIT: This is different from the suggested possible duplicate because I am not trying to apply a static CSS class, I am trying to use a variable to conditionally apply a style inline.

2
  • 1
    Possible duplicate of Angular ng-style with a conditional expression Commented Nov 17, 2016 at 2:12
  • the solutions are different enough that it could not be a duplicate, though I'm not positive if that's enough to differentiate. Commented Nov 17, 2016 at 5:06

2 Answers 2

1

I see you are using Angular 1.0.1. You can use this:

ng-style="doResize && {'width':'100%'} || {'width':'10%'}"

See demo below:

var vfApp = angular.module('vfApp', []);
vfApp.directive('resize', function($window) {
  return function($scope) {
    $scope.doResize = true;
  };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>

<body ng-app="vfApp">
  <!--This works...-->
  <input resize ng-style="{ 'width' : '100%' }" type="text" />
  <!--This does not?!-->
  <input resize ng-style="doResize && {'width':'100%'} || {'width':'10%'}" type="text" />

  <br/>isMobile value: {{doResize}}

</body>

Sign up to request clarification or add additional context in comments.

2 Comments

@KenSchnetz let me know your feedback on this, thanks!
Perfect... what's wierd to me is that the way was doing it in my JSFiddle works with text-alignment no problem, but it doesn't work for width. Your solution however works great!! Thank you.
0

If you are aiming for the 100% width value, the problem is simple the ternary expression:

doResize ? '100%' : '10%'.

in your js file doResize is false. If you don't understand ternary expressions, they are a condensed if. The uncompressed form of your code is:

if(doResize) {
  return '100%';
} else {
  return '10%';
}

So you have two options to fix it:

  1. Change $scope.doResize = false; to $scope.doResize = true;
  2. Change the ternary expression to doResize ? '10%' : '100%';

Hope that helps.

3 Comments

I understand the doResize is false, I condensed my overall code to solve this problem before implementing it in my website. Also, the problem isnt that I am not getting the 100% width, i'm not getting the 10% width either. Thank you for your time!
sorry, I misunderstood.
Please don't be sorry, I probably didn't explain it well enough!! Thank you so much for your time.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.