---
sourceDocument: Referência de API do Xanadu
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/pt-BR/xanadu/api-reference

 Release :

    - xanadu

ft:locale :

    - pt-BR

ft:publication_title :

    - Referência de API do Xanadu

ft:clusterId :

    - crapiref

bundleId :

    - crapiref

workflow :

    - Creator


---

# spUtil - Cliente

# spUtil - Cliente {#ariaid-title1}

* Versão de lançamento: Xanadu
* 
* Atualizado 1 de ago. de 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 8 min. de leitura

A API spUtil fornece métodos de utilitário para executar funções comuns em um script de cliente de widget Portal de serviços.  
Essas funções incluem:

* Exibir uma mensagem de erro de notificação. [spUtil - addErrorMessage (cadeia de caracteres mensagem)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-addErrorMessage_S "Exibe uma mensagem de erro de notificação.")
* Exibir uma mensagem informativa de notificação. [spUtil -- addInfoMessage(cadeia de caracteres mensagem)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-addInfoMessage_S "Exibe uma mensagem informativa de notificação.")
* Exibir uma mensagem de notificação comum. [spUtil - addTrivialMessage (cadeia de caracteres mensagem)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-addTrivialMessage_S "Exibe uma mensagem de notificação comum.")
* Crie um identificador exclusivo. [spUtil -- createUid()](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-createUid "Crie um identificador exclusivo.")
* Formate uma cadeia de caracteres com variáveis. [spUtil - format (modelo de cadeia de caracteres, dados do objeto)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-format_S_O "Formata uma cadeia de caracteres que contém variáveis.")
* Incorporar um modelo de widget em um client script de widget. [spUtil -- get(cadeia de caracteres dados do objeto widgetId)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-get_S "Incorpora um modelo de widget em um client script de widget.")
* Recupere todos os cabeçalhos a serem usados em chamadas de API. [spUtil -- getHeaders()](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-getHeaders "Recupera todos os cabeçalhos a serem usados para chamadas de API.")
* Retorne o domínio do host completo. [spUtil -- getHost()](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-getHost "Retorna o domínio do host completo.")
* Execute o retorno de chamada com a resposta Preferência do usuário passando o nome da preferência. [spUtil -- getPreference (preferência de cadeia de caracteres, retorno de chamada de função)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-getPreference "Executa o retorno de chamada com resposta de preferência do usuário passando o nome da preferência.")
* Retornar as informações de URL do portal de serviços atual. [spUtil -- getURL()](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-getURL "Retorna as informações de URL do portal de serviços atual.")
* Verifique se o cliente atual é um dispositivo móvel. [spUtil -- isMobile()](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-isMobile "Verifica se o cliente atual é um dispositivo móvel.")
* Analise os atributos separados por vírgulas em uma cadeia de caracteres especificada. [spUtil - parseAttributes (atributos de cadeia de caracteres)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-parseAttributes "Analisa os atributos separados por vírgulas em uma cadeia de caracteres especificada.")
* Observe se há atualizações em uma tabela ou filtro e retorna o valor da função de retorno de chamada. [spUtil - recordWatch(Object $scope, Tabela de cadeia de caracteres, Filtro de cadeia de caracteres, Retorno de chamada de função)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-recordWatch_O_S_S_F "Observa se há atualizações em uma tabela ou filtro e retorna o valor da função de retorno de chamada.")
* Chama o servidor e substitui as opções e os dados atuais pela resposta do servidor. [spUtil - atualizar (objeto $escopo)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-refresh_O "Chama o servidor e substitui as opções e os dados atuais pela resposta do servidor.")
* Role até o elemento com o seletor especificado, durante um período de tempo especificado. [spUtil -- rollTo(seletor de cadeia de caracteres, tempo numérico)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-scrollTo "Rola para o elemento com o seletor especificado, durante um período de tempo especificado.")
* Atualize as trilhas do cabeçalho. [spUtil -- setBreadCrumb(Objeto $escopo, trilhas de matriz)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-setBreadCrumb "Atualiza as trilhas do cabeçalho.")
* Defina uma preferência do usuário. [spUtil -- setPreference(cadeia de caracteres pref, valor de cadeia de caracteres)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-setPreference "Define uma preferência do usuário.")
* Atualize a página de pesquisa. [spUtil -- setSearchPage(cadeia de caracteres searchPage)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-setSearchPage "Atualiza a página de pesquisa.")
* Atualize o objeto de dados no servidor dentro de um determinado escopo. [spUtil - update(Object $scope)](https://servicenow-prod.fluidtopics.net/vzvJiovPdQ6IgvfpI~NT0Q#SPU-update_O "Atualiza o objeto de dados no servidor dentro de um determinado escopo.")

Para obter informações adicionais sobre widgets, consulte [Widgets do Portal de serviços](https://www.servicenow.com/docs/access?context=service-portal-widgets&version=xanadu&pubname=xanadu-platform-user-interface&ft:locale=en-US).

## spUtil - addErrorMessage (cadeia de caracteres mensagem) {#ariaid-title2}

Exibe uma mensagem de erro de notificação.
{#SPU-addErrorMessage_S__table_yjp_zpz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| message | Cadeia de caracteres | Mensagem de erro a ser exibida. |
[Tabela 1. Parâmetros]

{#SPU-addErrorMessage_S__table_yjp_zpz_31b} {#SPU-addErrorMessage_S__table_zjp_zpz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 2. Retorna]

{#SPU-addErrorMessage_S__table_zjp_zpz_31b}  

    spUtil.addErrorMessage("There has been an error processing your request")

## spUtil -- addInfoMessage(cadeia de caracteres mensagem) {#ariaid-title3}

Exibe uma mensagem informativa de notificação.
{#SPU-addInfoMessage_S__table_b2m_bqz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| message | Cadeia de caracteres | Mensagem a ser exibida. |
[Tabela 3. Parâmetros]

{#SPU-addInfoMessage_S__table_b2m_bqz_31b} {#SPU-addInfoMessage_S__table_c2m_bqz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 4. Retorna]

{#SPU-addInfoMessage_S__table_c2m_bqz_31b}  

    spUtil.addInfoMessage("Your order has been placed")

## spUtil - addTrivialMessage (cadeia de caracteres mensagem) {#ariaid-title4}

Exibe uma mensagem de notificação comum.
As mensagens triviais desaparecem após um curto período de tempo.
{#SPU-addTrivialMessage_S__table_kcx_dqz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| message | Cadeia de caracteres | Mensagem a ser exibida. |
[Tabela 5. Parâmetros]

{#SPU-addTrivialMessage_S__table_kcx_dqz_31b} {#SPU-addTrivialMessage_S__table_lcx_dqz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 6. Retorna]

{#SPU-addTrivialMessage_S__table_lcx_dqz_31b}  

    spUtil.addTrivialMessage("Thanks for your order")

## spUtil -- createUid() {#ariaid-title5}

Crie um identificador exclusivo.
{#SPU-createUid__table_ccv_cbr_t2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| Nenhum |   |   |
[Tabela 7. Parâmetros]

{#SPU-createUid__table_ccv_cbr_t2b} {#SPU-createUid__table_dcv_cbr_t2b__entry__2}

| Tipo | Descrição |
|-|-|
| Cadeia de caracteres | Um ID exclusivo de 32 caracteres. |
[Tabela 8. Retorna]

{#SPU-createUid__table_dcv_cbr_t2b}

## spUtil -- get(cadeia de caracteres dados do objeto widgetId) {#ariaid-title6}

Incorpora um modelo de widget em um client script de widget.
A função de retorno de chamada retorna o modelo de widget completo. Para obter informações adicionais sobre widgets, consulte [Widgets do Portal de serviços](https://www.servicenow.com/docs/access?context=service-portal-widgets&version=xanadu&pubname=xanadu-platform-user-interface&ft:locale=en-US).
{#SPU-get_S__table_bcy_fqz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| ID do widget | Cadeia de caracteres | ID do widget ou sys_id do widget a ser incorporado. |
| dados | Objeto | Opcional. Pares de nome/valor de parâmetros a serem passados para o modelo de widget. |
[Tabela 9. Parâmetros]

{#SPU-get_S__table_bcy_fqz_31b} {#SPU-get_S__table_ccy_fqz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| Objeto | Modelo do widget incorporado. |
[Tabela 10. Retorna]

{#SPU-get_S__table_ccy_fqz_31b}  
Sem dados passados.

    spUtil.get("widget-cool-clock").then(function(response) {
      c.coolClock = response;
    });

Com dados passados.

    spUtil.get('pps-list-modal', {title: c.data.editAllocations, 
      table: 'resource_allocation', 
      queryString: 'GROUPBYuser^resource_plan=' + c.data.sysId, 
      view: 'resource_portal_allocations' }).then(function(response) {
        var formModal = response;
        c.allocationListModal = response;
      });  	

## spUtil -- getHeaders() {#ariaid-title7}

Recupera todos os cabeçalhos a serem usados para chamadas de API.
{#SPU-getHeaders__table_dns_ldr_t2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| Nenhum |   |   |
[Tabela 11. Parâmetros]

{#SPU-getHeaders__table_dns_ldr_t2b} {#SPU-getHeaders__table_ens_ldr_t2b__entry__2}

| Tipo | Descrição |
|-|-|
| Objeto | Todos os cabeçalhos a serem usados para chamadas de API. |
[Tabela 12. Retorna]

{#SPU-getHeaders__table_ens_ldr_t2b}

## spUtil -- getHost() {#ariaid-title8}

Retorna o domínio do host completo.
{#SPU-getHost__table_olb_vkr_t2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| Nenhum |   |   |
[Tabela 13. Parâmetros]

{#SPU-getHost__table_olb_vkr_t2b} {#SPU-getHost__table_plb_vkr_t2b__entry__2}

| Tipo | Descrição |
|-|-|
| Cadeia de caracteres | O domínio do host completo, por exemplo `hi.servicenow.com` |
[Tabela 14. Retorna]

{#SPU-getHost__table_plb_vkr_t2b}

## spUtil -- getPreference (preferência de cadeia de caracteres, retorno de chamada de função) {#ariaid-title9}

Executa o retorno de chamada com resposta de preferência do usuário passando o nome da preferência.
{#SPU-getPreference__table_rvb_34r_t2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| preferência | Cadeia de caracteres | Nome da preferência. |
| retorno de chamada | Função | Defina a função de retorno de chamada. |
[Tabela 15. Parâmetros]

{#SPU-getPreference__table_rvb_34r_t2b} {#SPU-getPreference__table_svb_34r_t2b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 16. Retorna]

{#SPU-getPreference__table_svb_34r_t2b}

## spUtil -- getURL() {#ariaid-title10}

Retorna as informações de URL do portal de serviços atual.
{#SPU-getURL__table_sbh_dls_t2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| Nenhum |   |   |
[Tabela 17. Parâmetros]

{#SPU-getURL__table_sbh_dls_t2b} {#SPU-getURL__table_tbh_dls_t2b__entry__2}

| Tipo | Descrição |
|-|-|
| Cadeia de caracteres | URL do portal de serviço atual. |
[Tabela 18. Retorna]

{#SPU-getURL__table_tbh_dls_t2b}

## spUtil - format (modelo de cadeia de caracteres, dados do objeto) {#ariaid-title11}

Formata uma cadeia de caracteres que contém variáveis.
Use este método como uma alternativa à concatenação de cadeia de caracteres.
{#SPU-format_S_O__table_yrh_hqz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| modelo | Cadeia de caracteres | Modelo de cadeia de caracteres que contém valores para substituição de variável. |
| dados | Objeto | Objeto que contém os valores das variáveis definidas na cadeia de caracteres do modelo. |
[Tabela 19. Parâmetros]

{#SPU-format_S_O__table_yrh_hqz_31b} {#SPU-format_S_O__table_zrh_hqz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| Cadeia de caracteres | Cadeia de caracteres que contém os valores de variáveis em vez da nomenclatura de variáveis. |
[Tabela 20. Retorna]

{#SPU-format_S_O__table_zrh_hqz_31b}  

    spUtil.format('An error ocurred: {error} when loading {widget}', {error: '404', widget: 'sp-widget'})

Saída:

    'An error occurred: 404 when loading sp-widget'

## spUtil -- isMobile() {#ariaid-title12}

Verifica se o cliente atual é um dispositivo móvel.
{#SPU-isMobile__table_gz2_pcd_v2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| Nenhum |   |   |
[Tabela 21. Parâmetros]

{#SPU-isMobile__table_gz2_pcd_v2b} {#SPU-isMobile__table_hz2_pcd_v2b__entry__2}

| Tipo | Descrição |
|-|-|
| Booliano | Sinalizador que indica se o cliente atual é um dispositivo móvel. Valores válidos: * verdadeiro: o cliente atual é um dispositivo móvel. * falso: o cliente atual não é um dispositivo móvel. {#SPU-isMobile__ul_fpx_gsv_fvb} |
[Tabela 22. Retorna]

{#SPU-isMobile__table_hz2_pcd_v2b}

## spUtil - parseAttributes (atributos de cadeia de caracteres) {#ariaid-title13}

Analisa os atributos separados por vírgulas em uma cadeia de caracteres especificada.
{#SPU-parseAttributes__table_jkb_tvm_w2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| atributos | Cadeia de caracteres | Cadeia de caracteres que contém atributos separados por vírgula, como o campo Atributos de um registro de dicionário. |
[Tabela 23. Parâmetros]

{#SPU-parseAttributes__table_jkb_tvm_w2b} {#SPU-parseAttributes__table_kkb_tvm_w2b__entry__2}

| Tipo | Descrição |
|-|-|
| Matriz | Matriz de objetos que contém os atributos analisados. |
[Tabela 24. Retorna]

{#SPU-parseAttributes__table_kkb_tvm_w2b}  

    function getRefQualElements() {
      var refQualElements = [];
      if (field && field.attributes && field.attributes.indexOf('ref_qual_elements') > -1) {
        var attributes = spUtil.parseAttributes(field.attributes);
        refQualElements = attributes['ref_qual_elements'].split(';');
      }
      return refQualElements;
    }

## spUtil - recordWatch(Object $scope, Tabela de cadeia de caracteres, Filtro de cadeia de caracteres, Retorno de chamada de função) {#ariaid-title14}

Observa se há atualizações em uma tabela ou filtro e retorna o valor da função de retorno de chamada.
Permite que um desenvolvedor de widget responda a atualizações de tabela em tempo real. Por exemplo, usando recordWatch(), o widget de lista simples pode escutar mudanças em sua tabela de dados. Se registros forem adicionados, removidos ou atualizados, o widget será atualizado automaticamente.  
Nota:  
Ao passar o argumento `$scope` para a função recordWatch(), injete `$scope` nos parâmetros da função de client script.
{#SPU-recordWatch_O_S_S_F__table_vys_mqz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| $escopo | Objeto | Escopo do objeto de dados atualizado pela função de retorno de chamada. |
| tabela | Cadeia de caracteres | Tabela observada. |
| filtros | Cadeia de caracteres | Filtrar por campos a serem observados. |
| retorno de chamada | Função | Opcional. Parâmetro para definir a função de retorno de chamada. |
[Tabela 25. Parâmetros]

{#SPU-recordWatch_O_S_S_F__table_vys_mqz_31b} {#SPU-recordWatch_O_S_S_F__table_wys_mqz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| Promessa | Valor de retorno da função de retorno de chamada. |
[Tabela 26. Retorna]

{#SPU-recordWatch_O_S_S_F__table_wys_mqz_31b}  

    //A simple recordWatch function.
    spUtil.recordWatch($scope, "live_profile", "sys_id=" + liveProfileId);

    //In a widget client script
    function(spUtil, $scope) {
      /* widget controller */
      var c =this;

      // Registers a listener on the incident table with the filter active=true, 
      // meaning that whenever something changes on that table with that filter, 
      // the callback function is executed.    
      // The callback function takes a single parameter 'response', which contains 
      // the property 'data'. The 'data' property contains information about the changed record. 
      spUtil.recordWatch($scope, "incident", "active=true", function(response) {
            
        // Returns the data inserted or updated on the table 
        console.log(response.data);   
        
        });
    }

## spUtil - atualizar (objeto $escopo) {#ariaid-title15}

Chama o servidor e substitui as opções e os dados atuais pela resposta do servidor.
Chamar `spUtil.refresh()` é semelhante a chamar `server.refresh()`. No entanto, ao chamar `spUtil.refresh()`, você pode definir o objeto $scope.
{#SPU-refresh_O__table_p2k_kqz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| $escopo | Objeto | Escopo definido para a atualização. |
[Tabela 27. Parâmetros]

{#SPU-refresh_O__table_p2k_kqz_31b} {#SPU-refresh_O__table_q2k_kqz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| Objeto | Opções e objetos de dados atualizados. |
[Tabela 28. Retorna]

{#SPU-refresh_O__table_q2k_kqz_31b}

## spUtil -- rollTo(seletor de cadeia de caracteres, tempo numérico) {#ariaid-title16}

Rola para o elemento com o seletor especificado, durante um período de tempo especificado.
{#SPU-scrollTo__table_drd_wzp_v2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| seletor | Cadeia de caracteres | Seletor para o qual rolar. |
| hora | Número | Tempo necessário para rolar até o seletor especificado. Unidade: Milissegundos |
[Tabela 29. Parâmetros]

{#SPU-scrollTo__table_drd_wzp_v2b} {#SPU-scrollTo__table_erd_wzp_v2b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 30. Retorna]

{#SPU-scrollTo__table_erd_wzp_v2b}

## spUtil -- setBreadCrumb(Objeto $escopo, trilhas de matriz) {#ariaid-title17}

Atualiza as trilhas do cabeçalho.
{#SPU-setBreadCrumb__table_sqx_jkr_v2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| $escopo | Objeto | Escopo definido para a tabela. |
| trilhas | Matriz | Condições usadas para criar o filtro de trilhas. |
[Tabela 31. Parâmetros]

{#SPU-setBreadCrumb__table_sqx_jkr_v2b} {#SPU-setBreadCrumb__table_tqx_jkr_v2b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 32. Retorna]

{#SPU-setBreadCrumb__table_tqx_jkr_v2b}

## spUtil -- setPreference(cadeia de caracteres pref, valor de cadeia de caracteres) {#ariaid-title18}

Define uma preferência do usuário.
{#SPU-setPreference__table_m1m_1hl_w2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| pref | Cadeia de caracteres | Nome de preferência |
| valor | Cadeia de caracteres | Valor de preferência |
[Tabela 33. Parâmetros]

{#SPU-setPreference__table_m1m_1hl_w2b} {#SPU-setPreference__table_n1m_1hl_w2b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 34. Retorna]

{#SPU-setPreference__table_n1m_1hl_w2b}

## spUtil -- setSearchPage(cadeia de caracteres searchPage) {#ariaid-title19}

Atualiza a página de pesquisa.
{#SPU-setSearchPage__table_hm4_v4l_w2b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| searchPage | Cadeia de caracteres | Nome da página de pesquisa. |
[Tabela 35. Parâmetros]

{#SPU-setSearchPage__table_hm4_v4l_w2b} {#SPU-setSearchPage__table_im4_v4l_w2b__entry__2}

| Tipo | Descrição |
|-|-|
| vazio |   |
[Tabela 36. Retorna]

{#SPU-setSearchPage__table_im4_v4l_w2b}

## spUtil - update(Object $scope) {#ariaid-title20}

Atualiza o objeto de dados no servidor dentro de um determinado escopo.
Este método é semelhante a `server.update()`, mas inclui um parâmetro $scope que define o escopo a ser passado.
{#SPU-update_O__table_hpd_4qz_31b__entry__3}

| Nome | Tipo | Descrição |
|-|-|-|
| $escopo | Objeto | Escopo definido para a atualização. |
[Tabela 37. Parâmetros]

{#SPU-update_O__table_hpd_4qz_31b} {#SPU-update_O__table_ipd_4qz_31b__entry__2}

| Tipo | Descrição |
|-|-|
| Objeto | Objeto de dados atualizado. |
[Tabela 38. Retorna]

{#SPU-update_O__table_ipd_4qz_31b}  
O exemplo a seguir inclui um widget P1 que observa mudanças no campo de estado e usa um filtro para observar todos os P1s ativos e permitir que a função de retorno de chamada determine se os dados devem ser atualizados. A propriedade data.changes contém uma matriz de todos os campos atualizados. Se o estado de qualquer campo tiver sido alterado, os dados serão atualizados no widget.

    var q = "priority=1^active=true^EQ";
    spUtil.recordWatch($scope, "incident", q, function(event, data) {
       if (data.changes.includes("state")) { // only update if state was updated.
          spUtil.update($scope);
       }
    });


