簡體   English   中英

嘗試使用JSON數組中的屬性(angularjs)

[英]Trying to use an attribute from a JSON array (angularjs)

**更新:現在我感謝大家的幫助,但是當該字段為null時,我收到錯誤消息“無法讀取null的屬性'split'”,該怎么辦?

我有這個JSON數據數組,只是一個帶有2個對象的示例。

    {
    "proyecto": "Probando",
    "complejidad": "Media",
    "glosa": "QA",
    "inicio": "30-06-16",
    "termino": "27-09-16",
    "completado": "50",
    "esperado": "100",
    "estado": "Atrasado",
    "responsable": "Lionel Messi",
    "alerta": "01-02-2017 : Se define paso a produccion para el 18-02;\r\n\r\nAnalista responsable: Ronaldo ronald;\r\nEstado Actual: 13\/05 DEF firmado;\r\n\r\nServico curse credito internet, modificar el curse y el que envia la solicitus mod 2 servicos;"
}, {
    "proyecto": "Migracion",
    "complejidad": "Alta",
    "glosa": "QA",
    "inicio": "18-01-16",
    "termino": "22-04-77",
    "completado": "27",
    "esperado": "86",
    "estado": "Atrasado",
    "responsable": "Christiano ronaldo",
    "alerta": "08-02-2017 : Se define salida para 21 al 23 de abril, con dependencia de salida proyecto supercluster;"
}

這種方式從angularjs用GET獲取數據

$scope.llamada3 = function(){

    $http.get("conector.php?tipoDato=query3")
    .then(function(response) {
        $scope.mensajeEspera = "";
        $scope.datos3 = response.data;

我試圖從中獲取屬性“ alerta”,以便我可以拆分“;”所在的字段 結束但不起作用。 我現在有這個

for(var i = 0; i < $scope.datos3.length; i++){
    var currentObj = $scope.datos3[i];
    currentObj.alerta[i] = $scope.datos3.currentObj[i].alerta.split(';');
}

在HTML即時通訊中使用ng-repeat

<tr ng-repeat="z in datos3">
        <td style="vertical-align: top;"><a  href="#" ng-click="mostrar_proyecto(z.project_id)">{{z.proyecto}}</a></td>
        <td style="vertical-align: top;">{{z.complejidad}}</td>
        <td style="vertical-align: top;">{{z.glosa}}</td>
        <td style="vertical-align: top;">{{z.inicio}}</td>
        <td style="vertical-align: top;">{{z.termino}}</td>    
        <td style="vertical-align: top;">{{z.estado}}</td>
        <td style="vertical-align: top;">{{z.responsable}}</td>    
        <td style="vertical-align: top;"> 
             <div class="hooveralerta">
                <div ng-repeat="d in alerta">
                    {{d}}
                </div>
             </div>
        </td>

您正在通過以下方式訪問未定義: $scope.datos3.currentObj[i].alerta.split(';'); 並且您沒有將這些更改存儲在$scope.dataos3

嘗試更改循環以直接訪問它們,例如:

for(var i = 0; i < $scope.datos3.length; i++){
    $scope.datos3[i].alerta = (typeof $scope.datos3[i].alerta == 'string') 
        ? $scope.datos3[i].alerta.split(';') 
        : [];
}

僅應在$http.get()完成之內或之后執行上述操作。

例:

$http.get("conector.php?tipoDato=query3")
    .then(function(response) {
        $scope.mensajeEspera = "";
        $scope.datos3 = response.data;
        // Do the alteration here
        for(var i = 0; i < $scope.datos3.length; i++){
            $scope.datos3[i].alerta = (typeof $scope.datos3[i].alerta == 'string') 
                ? $scope.datos3[i].alerta.split(';') 
                : [];
        }
    };

這里發生了幾件事情。 首先, datos3沒有currentObj 所以這行不通:

currentObj.alerta[i] = $scope.datos3.currentObj[i].alerta.split(';');

相反,將其更改為類似

for(var i = 0; i < $scope.datos3.length; i++){
    var currentObj = $scope.datos3[i];
    currentObj.alertaObject = currentObj.alerta.split(';');
}

而且,如果您想刪除JSON對象中的換行符,則可以包含以下內容:

for(var i = 0; i < datos3.length; i++){
    var currentObj = datos3[i];
    currentObj.alertaObject = currentObj.alerta.split(';');
    for (var j in currentObj.alertaObject) {
      currentObj.alertaObject[j] = currentObj.alertaObject[j].replace(/\n/g,'').replace(/\r/g,'');
    }
    console.log(currentObj.alertaObject);
}

最后,如果這里使用的是實際的JSON,則您的JSON無效,這可能會引起問題。 您需要將兩個單獨的對象封裝到一個包含對象的對象中:

[{
    "proyecto": "Probando",
    "complejidad": "Media",
    "glosa": "QA",
    "inicio": "30-06-16",
    "termino": "27-09-16",
    "completado": "50",
    "esperado": "100",
    "estado": "Atrasado",
    "responsable": "Lionel Messi",
    "alerta": "01-02-2017 : Se define paso a produccion para el 18-02;\r\n\r\nAnalista responsable: Ronaldo ronald;\r\nEstado Actual: 13\/05 DEF firmado;\r\n\r\nServico curse credito internet, modificar el curse y el que envia la solicitus mod 2 servicos;"
}, {
    "proyecto": "Migracion",
    "complejidad": "Alta",
    "glosa": "QA",
    "inicio": "18-01-16",
    "termino": "22-04-77",
    "completado": "27",
    "esperado": "86",
    "estado": "Atrasado",
    "responsable": "Christiano ronaldo",
    "alerta": "08-02-2017 : Se define salida para 21 al 23 de abril, con dependencia de salida proyecto supercluster;"
}]

工作示例: https//jsfiddle.net/mspinks/yfyaehd7/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM