Matoy Matoy - 1 year ago 47
Javascript Question

show button when fields return from js

I am using angular to show a form which have 2 fields that are being assign via db query (user and room) and a submit button (which doesn't need any db operation to load).

what happens, when I write this code below, is that the button is being shown instantly (since it doesn't depened on anything) and the fields: randomName, and randomRoom take a bit time to load since they need db operation.

what I want is to show all the form (button and fields at the same time).

I need something of when-fields-are-loaded-from-db ---> load them with button...


<button type="button" ng-click="randomRoomButtonClass=true;getRandomRoom()">Random conversation!</button>
<li ng-if="randomRoomButtonClass" style="list-style: none;">{{randomName}}</li>
<li ng-if="randomRoomButtonClass" style="list-style: none;">{{randomRoom}}</li>
<button type="button" ng-if="randomRoomButtonClass" ng-click="enterRoom({name: randomName,room: randomRoom})">Enter!

Rob Rob
Answer Source

Wrap the html in a div using an ng-if directive. The timeout is used for proof of concept. This would be in your callback instead, minus the $timeout.


function AppCtrl($scope, $timeout) {
  $timeout(function() {
    $scope.randomName = 'Yo';
    $scope.randomRoom = 'Hey';
  }, 2000);


<span ng-if="!randomName">Loading...</span>
<div ng-if="randomName">
  <button type="button" ng-click="randomRoomButtonClass=true;getRandomRoom()">Random conversation!</button>
  <button type="button" ng-click="enterRoom({name: randomName,room: randomRoom})">Enter!