---
title: Income Survey
product: Form Library
description: Gain valuable insights into the financial status of your target audience with this free demo. Learn how to configure and embed an income survey in your JavaScript app to do an effective market research or consumer behavior analysis, plan product development strategies, and more.
framework: Angular
source: https://surveyjs.io/form-library/examples/how-to-configure-and-embed-income-survey/angular
index: https://surveyjs.io/form-library/examples/overview.md
---

# Income Survey (Angular)

## Files

### `src/app/components/json.ts`

```ts
export const json = {
  "pages": [
    {
      "name": "page0",
      "elements": [
        {
          "type": "panel",
          "name": "panel1",
          "elements": [
            {
              "type": "html",
              "name": "income_intro",
              "html": "<article class='intro'><h4 class='intro__heading intro__heading--income title'>Income</h4><div class='intro__body wysiwyg'><p>In this section, you will be asked about your current employment and any other way you and your partner currently receive income.</p><p>It will be handy to have the following in front of you:</p><ul><li>Payslip (for employment details)</li><li><p>A current Centrelink Schedule for any account-based pension from super, annuities, or other income stream products that you own.</p><p>If you don't have a current one, you can get these schedules by contacting your income stream provider.</p></li><li>Latest statement from any payments (from Centrelink or other authority)</li></ul></div></article>"
            }
          ]
        }
      ]
    },
    {
      "name": "page1",
      "elements": [
        {
          "type": "radiogroup",
          "name": "maritalstatus_c",
          "title": "What is your marital status?",
          "titleLocation": "top",
          "choices": [
            "Married",
            "In a registered relationship",
            "Living with my partner",
            "Widowed",
            "Single"
          ]
        }
      ]
    },
    {
      "name": "page2",
      "elements": [
        {
          "type": "panel",
          "name": "panel5",
          "title": "Do you and/or your partner currently receive income from employment?",
          "elements": [
            {
              "type": "panel",
              "name": "panel2",
              "questionTitleLocation": "hidden",
              "title": "You",
              "elements": [
                {
                  "type": "radiogroup",
                  "name": "member_receives_income_from_employment",
                  "isRequired": true,
                  "choices": [
                    {
                      "value": "1",
                      "text": "Yes"
                    },
                    {
                      "value": "0",
                      "text": "No"
                    }
                  ],
                  "colCount": 2
                },
                {
                  "type": "checkbox",
                  "name": "member_type_of_employment",
                  "visible": false,
                  "visibleIf": "{member_receives_income_from_employment} =1",
                  "isRequired": true,
                  "choices": [
                    "Self employment",
                    "All other types of employment"
                  ]
                }
              ]
            },
            {
              "type": "panel",
              "name": "panel-yourPartner-receive_income",
              "visible": false,
              "visibleIf": "{maritalstatus_c} = 'Married' or {maritalstatus_c} = 'In a registered relationship' or {maritalstatus_c} = 'Living with my partner'",
              "questionTitleLocation": "hidden",
              "title": "Your Partner",
              "startWithNewLine": false,
              "elements": [
                {
                  "type": "radiogroup",
                  "name": "partner_receives_income_from_employment",
                  "isRequired": true,
                  "choices": [
                    {
                      "value": "1",
                      "text": "Yes"
                    },
                    {
                      "value": "0",
                      "text": "No"
                    }
                  ],
                  "colCount": 2
                },
                {
                  "type": "checkbox",
                  "name": "partner_type_of_employment",
                  "visible": false,
                  "visibleIf": "{partner_receives_income_from_employment} =1",
                  "isRequired": true,
                  "choices": [
                    "Self employment",
                    "All other types of employment"
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "page3.1",
      "visible": false,
      "visibleIf": "{member_type_of_employment} contains 'All other types of employment' or {partner_type_of_employment} contains 'All other types of employment'",
      "elements": [
        {
          "type": "panel",
          "name": "panel6",
          "title": "Who are you employed by?",
          "elements": [
            {
              "type": "panel",
              "name": "you-employed",
              "visible": false,
              "visibleIf": "{member_type_of_employment} contains 'All other types of employment'",
              "title": "You",
              "elements": [
                {
                  "type": "paneldynamic",
                  "name": "member_arrray_employer_names",
                  "title": "Please enter all your employers",
                  "valueName": "member_arrray_employer",
                  "templateElements": [
                    {
                      "type": "text",
                      "name": "member_employer_name",
                      "title": "Name of employer",
                      "valueName": "name"
                    }
                  ],
                  "panelCount": 1,
                  "minPanelCount": 1,
                  "addPanelText": "Add another employer"
                }
              ]
            },
            {
              "type": "panel",
              "name": "panel8",
              "visible": false,
              "visibleIf": "{partner_type_of_employment} contains 'All other types of employment'",
              "title": "Your Partner",
              "startWithNewLine": false,
              "elements": [
                {
                  "type": "paneldynamic",
                  "name": "partner_arrray_employer_names",
                  "title": "Please enter all your partner employers",
                  "valueName": "partner_arrray_employer",
                  "templateElements": [
                    {
                      "type": "text",
                      "name": "partner_employer_name",
                      "title": "Name of employer",
                      "valueName": "name"
                    }
                  ],
                  "panelCount": 1,
                  "minPanelCount": 1,
                  "addPanelText": "Add another employer"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "page3.2",
      "visibleIf": "{member_type_of_employment} contains 'All other types of employment' or {partner_type_of_employment} contains 'All other types of employment'",
      "elements": [
        {
          "type": "panel",
          "name": "panel16",
          "title": "Tells us about your employer(s)",
          "elements": [
            {
              "type": "panel",
              "name": "panel17",
              "visibleIf": "{member_type_of_employment} contains 'All other types of employment'",
              "title": "You",
              "elements": [
                {
                  "type": "paneldynamic",
                  "name": "member_arrray_employer_info",
                  "title": "Your employers",
                  "valueName": "member_arrray_employer",
                  "templateElements": [
                    {
                      "type": "panel",
                      "name": "panel_member_employer_address",
                      "title": "Address",
                      "elements": [
                        {
                          "type": "text",
                          "name": "member_employer_address",
                          "title": "Address",
                          "valueName": "address"
                        },
                        {
                          "type": "text",
                          "name": "member_employer_phone",
                          "title": "Phone number:",
                          "valueName": "phone"
                        },
                        {
                          "type": "text",
                          "name": "member_employer_abn",
                          "title": "ABN",
                          "valueName": "abn"
                        }
                      ]
                    },
                    {
                      "type": "panel",
                      "name": "panel_member_employer_role",
                      "title": "What is your role?",
                      "elements": [
                        {
                          "type": "radiogroup",
                          "name": "member_employer_role",
                          "title": "Your role",
                          "valueName": "role",
                          "choices": [
                            "Full time",
                            "Part time",
                            "Casual",
                            "Seasonal"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "panel",
                      "name": "panel_member_employer_hours_work",
                      "title": "What hours do you work?",
                      "elements": [
                        {
                          "type": "text",
                          "name": "member_employer_hours_worked",
                          "title": "Hours:",
                          "valueName": "hours_worked",
                          "inputType": "number"
                        },
                        {
                          "type": "dropdown",
                          "name": "member_employer_hours_worked_frequency",
                          "startWithNewLine": false,
                          "title": "Worked Frequency:",
                          "valueName": "hours_worked_frequency",
                          "defaultValue": "Year",
                          "choices": [
                            "Day",
                            "Week",
                            "Fortnight",
                            "Month",
                            "Year"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "panel",
                      "name": "panel_member_employer_income",
                      "title": "What income do you receive?",
                      "elements": [
                        {
                          "type": "text",
                          "name": "member_employer_income",
                          "title": "Income:",
                          "valueName": "income",
                          "inputType": "number"
                        },
                        {
                          "type": "dropdown",
                          "name": "member_employer_income_frequency",
                          "startWithNewLine": false,
                          "title": "Income Frequency",
                          "valueName": "income_frequency",
                          "defaultValue": "Year",
                          "choices": [
                            "Day",
                            "Week",
                            "Fortnight",
                            "Month",
                            "Year"
                          ]
                        }
                      ]
                    }
                  ],
                  "templateTitle": "Employer name: {panel.name}",
                  "allowAddPanel": false,
                  "allowRemovePanel": false,
                  "panelCount": 1,
                  "displayMode": "carousel"
                }
              ]
            },
            {
              "type": "panel",
              "name": "panel18",
              "visibleIf": "{partner_type_of_employment} contains 'All other types of employment'",
              "title": "You partner",
              "startWithNewLine": false,
              "elements": [
                {
                  "type": "paneldynamic",
                  "name": "partner_arrray_employer_info",
                  "title": "Your partner employers",
                  "valueName": "partner_arrray_employer",
                  "templateElements": [
                    {
                      "type": "panel",
                      "name": "panel_partner_employer_address",
                      "title": "Address",
                      "elements": [
                        {
                          "type": "text",
                          "name": "partner_employer_address",
                          "title": "Address:",
                          "valueName": "address"
                        },
                        {
                          "type": "text",
                          "name": "partner_employer_phone",
                          "title": "Phone number",
                          "valueName": "phone"
                        },
                        {
                          "type": "text",
                          "name": "partner_employer_abn",
                          "title": "ABN",
                          "valueName": "abn"
                        }
                      ]
                    },
                    {
                      "type": "panel",
                      "name": "panel_partner_employer_role",
                      "title": "What is your role?",
                      "elements": [
                        {
                          "type": "radiogroup",
                          "name": "partner_employer_role",
                          "title": "Your role",
                          "valueName": "role",
                          "choices": [
                            "Full time",
                            "Part time",
                            "Casual",
                            "Seasonal"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "panel",
                      "name": "panel_partner_employer_hours_work",
                      "title": "What hours do you work?",
                      "elements": [
                        {
                          "type": "text",
                          "name": "partner_employer_hours_worked",
                          "title": "Hours",
                          "valueName": "hours_worked",
                          "inputType": "number"
                        },
                        {
                          "type": "dropdown",
                          "name": "partner_employer_hours_worked_frequency",
                          "startWithNewLine": false,
                          "title": "Worked Frequency:",
                          "valueName": "hours_worked_frequency",
                          "defaultValue": "Year",
                          "choices": [
                            "Day",
                            "Week",
                            "Fortnight",
                            "Month",
                            "Year"
                          ]
                        }
                      ]
                    },
                    {
                      "type": "panel",
                      "name": "panel_partner_employer_income",
                      "title": "What income do you receive?",
                      "elements": [
                        {
                          "type": "text",
                          "name": "partner_employer_income",
                          "title": "Income:",
                          "valueName": "income",
                          "inputType": "number"
                        },
                        {
                          "type": "dropdown",
                          "name": "partner_employer_income_frequency",
                          "startWithNewLine": false,
                          "title": "Income frequency:",
                          "valueName": "income_frequency",
                          "defaultValue": "Year",
                          "choices": [
                            "Day",
                            "Week",
                            "Fortnight",
                            "Month",
                            "Year"
                          ]
                        }
                      ]
                    }
                  ],
                  "templateTitle": "Employer name: {panel.name}",
                  "allowAddPanel": false,
                  "allowRemovePanel": false,
                  "panelCount": 1,
                  "displayMode": "carousel"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "page4",
      "visible": false,
      "visibleIf": "{member_type_of_employment} contains 'All other types of employment' or {partner_type_of_employment} contains 'All other types of employment'",
      "elements": [
        {
          "type": "panel",
          "name": "panel9",
          "title": "Do any of your employers provide you with fringe benefits?",
          "elements": [
            {
              "type": "panel",
              "name": "panel-you-fringe-benefits",
              "visible": false,
              "visibleIf": "{member_type_of_employment} contains 'All other types of employment'",
              "questionTitleLocation": "hidden",
              "title": "You",
              "elements": [
                {
                  "type": "radiogroup",
                  "name": "member_receive_fringe_benefits",
                  "isRequired": true,
                  "choices": [
                    {
                      "value": "1",
                      "text": "Yes"
                    },
                    {
                      "value": "0",
                      "text": "No"
                    }
                  ],
                  "colCount": 2
                },
                {
                  "type": "panel",
                  "name": "panel11",
                  "visible": false,
                  "visibleIf": "{member_receive_fringe_benefits} = 1",
                  "elements": [
                    {
                      "type": "text",
                      "name": "member_fringe_benefits_type"
                    },
                    {
                      "type": "text",
                      "name": "member_fringe_benefits_value"
                    },
                    {
                      "type": "radiogroup",
                      "name": "member_fringe_benefits_grossing",
                      "choices": [
                        "Grossed up",
                        "Not grossed up"
                      ]
                    }
                  ]
                }
              ]
            },
            {
              "type": "panel",
              "name": "your-partner-employed",
              "visible": false,
              "visibleIf": "{partner_type_of_employment} contains 'All other types of employment'",
              "questionTitleLocation": "hidden",
              "title": "Your Partner",
              "startWithNewLine": false,
              "elements": [
                {
                  "type": "radiogroup",
                  "name": "partner_receive_fringe_benefits",
                  "isRequired": true,
                  "choices": [
                    {
                      "value": "1",
                      "text": "Yes"
                    },
                    {
                      "value": "0",
                      "text": "No"
                    }
                  ],
                  "colCount": 2
                },
                {
                  "type": "panel",
                  "name": "panel12",
                  "visible": false,
                  "visibleIf": "{partner_receive_fringe_benefits} = 1",
                  "elements": [
                    {
                      "type": "text",
                      "name": "partner_fringe_benefits_type"
                    },
                    {
                      "type": "text",
                      "name": "partner_fringe_benefits_value"
                    },
                    {
                      "type": "radiogroup",
                      "name": "partner_fringe_benefits_grossing",
                      "choices": [
                        "Grossed up",
                        "Not grossed up"
                      ]
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "name": "page5",
      "visible": false,
      "visibleIf": "{member_receives_income_from_employment} = 1 or {partner_receives_income_from_employment} =1 ",
      "elements": [
        {
          "type": "panel",
          "name": "panel10",
          "title": "In the last 6 months, have you done any seasonal, intermittent or contract work?",
          "elements": [
            {
              "type": "panel",
              "name": "panel-you-work",
              "visible": false,
              "visibleIf": "{member_receives_income_from_employment} = 1",
              "questionTitleLocation": "hidden",
              "title": "You",
              "elements": [
                {
                  "type": "radiogroup",
                  "name": "member_seasonal_intermittent_or_contract_work",
                  "isRequired": true,
                  "choices": [
                    {
                      "value": "1",
                      "text": "Yes"
                    },
                    {
                      "value": "0",
                      "text": "No"
                    }
                  ],
                  "colCount": 2
                }
              ]
            },
            {
              "type": "panel",
              "name": "panel-partner-work",
              "visible": false,
              "visibleIf": "{partner_receives_income_from_employment} =1 ",
              "questionTitleLocation": "hidden",
              "title": "Your Partner",
              "startWithNewLine": false,
              "elements": [
                {
                  "type": "radiogroup",
                  "name": "partner_seasonal_intermittent_or_contract_work",
                  "title": " ",
                  "isRequired": true,
                  "choices": [
                    {
                      "value": "1",
                      "text": "Yes"
                    },
                    {
                      "value": "0",
                      "text": "No"
                    }
                  ],
                  "colCount": 2
                }
              ]
            }
          ]
        }
      ]
    }
  ],
  "storeOthersAsComment": false,
  "pagePrevText": "Previous",
  "pageNextText": "Continue",
  "completeText": "Finish",
  "requiredMark": ""
};
```

### `src/app/components/survey.component.css`

```css
/* You can add your custom CSS here. */
```

### `src/app/components/survey.component.html`

```html
<survey [model]="model" style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; height:100%"></survey>
```

### `src/app/components/survey.component.ts`

```ts
import { Component, OnInit } from "@angular/core";
import { Model } from "survey-core";
import { json } from "./json";
import "./survey.component.css";
import "survey-core/survey-core.min.css";

@Component({
    // tslint:disable-next-line:component-selector
    selector: "component-survey",
    templateUrl: "./survey.component.html",
    styleUrls: ["./survey.component.css"]
})
export class SurveyComponent implements OnInit {
    model: Model;
    ngOnInit() {
        const survey = new Model(json);
        survey.onComplete.add((sender, options) => {
            console.log(JSON.stringify(sender.data, null, 3));
        });
        this.model = survey;
    }
}
```

### `src/app/components/theme.ts`

```ts
export const themeJson = {};
```

### `src/app/app.component.css`

```css

```

### `src/app/app.component.html`

```html
<component-survey></component-survey>
```

### `src/app/app.component.ts`

```ts
import { Component } from "@angular/core";

@Component({
    selector: "app-root",
    templateUrl: "./app.component.html",
    styleUrls: ["./app.component.css"]
})
export class AppComponent {
    title = "CodeSandbox";
}
```

### `src/app/app.module.ts`

```ts
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";

import { AppComponent } from "./app.component";
import { SurveyModule } from "survey-angular-ui";
import { SurveyComponent } from "./components/survey.component";

@NgModule({
    declarations: [AppComponent, SurveyComponent],
    imports: [BrowserModule, SurveyModule],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }
```

### `src/environments/environment.prod.ts`

```ts
export const environment = {
    production: true
};
```

### `src/environments/environment.ts`

```ts
// The file contents for the current environment will overwrite these during build.
// The build system defaults to the dev environment which uses `environment.ts`, but if you do
// `ng build --env=prod` then `environment.prod.ts` will be used instead.
// The list of which env maps to which file can be found in `.angular-cli.json`.

export const environment = {
    production: false
};
```

### `src/index.html`

```html
<app-root></app-root>
```

### `src/main.ts`

```ts
import { enableProdMode } from "@angular/core";
import { platformBrowserDynamic } from "@angular/platform-browser-dynamic";

import { AppModule } from "./app/app.module";
import { environment } from "./environments/environment";

if (environment.production) {
    enableProdMode();
}

platformBrowserDynamic()
    .bootstrapModule(AppModule)
    .catch(err => console.log(err));
```

### `src/polyfills.ts`

```ts
/**
 * This file includes polyfills needed by Angular and is loaded before the app.
 * You can add your own extra polyfills to this file.
 *
 * This file is divided into 2 sections:
 *   1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
 *   2. Application imports. Files imported after ZoneJS that should be loaded before your main
 *      file.
 *
 * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
 * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
 * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
 *
 * Learn more in https://angular.io/docs/ts/latest/guide/browser-support.html
 */

/***************************************************************************************************
 * BROWSER POLYFILLS
 */

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
// import 'core-js/es6/symbol';
// import 'core-js/es6/object';
// import 'core-js/es6/function';
// import 'core-js/es6/parse-int';
// import 'core-js/es6/parse-float';
// import 'core-js/es6/number';
// import 'core-js/es6/math';
// import 'core-js/es6/string';
// import 'core-js/es6/date';
// import 'core-js/es6/array';
// import 'core-js/es6/regexp';
// import 'core-js/es6/map';
// import 'core-js/es6/weak-map';
// import 'core-js/es6/set';

/** IE10 and IE11 requires the following for NgClass support on SVG elements */
// import 'classlist.js';  // Run `npm install classlist.js`.

/** IE10 and IE11 requires the following for the Reflect API. */
// import 'core-js/es6/reflect';

/** Evergreen browsers require these. **/
// Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove.
import "core-js/proposals/reflect-metadata";

/**
 * Required to support Web Animations `@angular/platform-browser/animations`.
 * Needed for: All but Chrome, Firefox and Opera. http://caniuse.com/#feat=web-animation
 **/
// import 'web-animations-js';  // Run `npm install web-animations-js`.

/***************************************************************************************************
 * Zone JS is required by default for Angular itself.
 */
import "zone.js/dist/zone"; // Included with Angular CLI.

/***************************************************************************************************
 * APPLICATION IMPORTS
 */
```

### `src/styles.css`

```css
/* You can add your custom CSS here. */
```

### `src/typings.d.ts`

```ts
/* SystemJS module definition */
declare var module: NodeModule;
interface NodeModule {
    id: string;
}
```

### `.angular-cli.json`

```json
{
  "apps": [
    {
      "root": "src",
      "outDir": "dist",
      "assets": [ "assets", "favicon.ico" ],
      "index": "index.html",
      "main": "main.ts",
      "polyfills": "polyfills.ts",
      "prefix": "app",
      "styles": [ "styles.css" ],
      "scripts": [ ],
      "environmentSource": "environments/environment.ts",
      "environments": {
        "dev": "environments/environment.ts",
        "prod": "environments/environment.prod.ts"
      }
    }
  ]
}
```

### `_tsconfig.json`

```json
{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "allowSyntheticDefaultImports": true,
    "downlevelIteration": true,
    "experimentalDecorators": true,
    "moduleResolution": "node",
    "importHelpers": true,
    "resolveJsonModule": true,
    "target": "es2015",
    "module": "es2020",
    "lib": [
      "es2018",
      "dom"
    ]
  }
}
```

### `package.json`

```json
{
  "name": "surveyjs-angular",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "14.1.1",
    "@angular/cdk": "14.1.1",
    "@angular/common": "14.1.1",
    "@angular/compiler": "14.1.1",
    "@angular/core": "14.1.1",
    "@angular/forms": "14.1.1",
    "@angular/platform-browser": "14.1.1",
    "@angular/platform-browser-dynamic": "14.1.1",
    "@angular/router": "14.1.1",
    "core-js": "3.6.4",
    "rxjs": "6.5.4",
    "survey-core": "latest",
    "survey-angular-ui": "latest",
    "tslib": "1.13.0",
    "zone.js": "0.11.7"
  },
  "devDependencies": {
    "@angular/cli": "1.6.6",
    "@angular/compiler-cli": "^5.2.0",
    "@angular/language-service": "^5.2.0",
    "@types/core-js": "0.9.46",
    "@types/jasmine": "~2.8.3",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "^4.0.1",
    "jasmine-core": "~2.8.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~2.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.1.2",
    "ts-node": "~4.1.0",
    "tslint": "~5.9.1",
    "typescript": "3.9.7"
  },
  "keywords": [ "angular", "surveyjs" ],
  "description": "SurveyJS-Angular example project"
}
```

## Other Frameworks

- [React](https://surveyjs.io/form-library/examples/how-to-configure-and-embed-income-survey/reactjs.md)
- [Vue 3](https://surveyjs.io/form-library/examples/how-to-configure-and-embed-income-survey/vue3js.md)
- [jQuery](https://surveyjs.io/form-library/examples/how-to-configure-and-embed-income-survey/jquery.md)
- [Vanilla JS](https://surveyjs.io/form-library/examples/how-to-configure-and-embed-income-survey/vanillajs.md)
