AngularJS插值误差
发布时间:2020-12-17 08:19:51 所属栏目:安全 来源:网络整理
导读:我正在展示房间的属性作为我正在处理的房间管理应用程序的一部分,这是输出: 你可以看到,Beamer(投影机英文版)的价值是“Sony(lamp 01/12/2013)”。这个输出是正确的,但当我打开我的控制台时,我看到有关插值的一些错误: 更大的分辨率: "Can't interpol
我正在展示房间的属性作为我正在处理的房间管理应用程序的一部分,这是输出:
你可以看到,Beamer(投影机英文版)的价值是“Sony(lamp 01/12/2013)”。这个输出是正确的,但当我打开我的控制台时,我看到有关插值的一些错误: 更大的分辨率: "Can't interpolate: {{getBeamerString()}} TypeError: Cannot read property 'aanwezig' of undefined" 这是我的html部分: <section class="eigenschappen"> <table class="table table-striped table-hover table-bordered"> <thead> <tr> <th>Eigenschap</th> <th>Waarde</th> <th>Bewerk</th> </tr> </thead> <tbody> ... <tr> <td><img class="ruimteNaam" src="../Images/Beamer.png" alt=""/>Beamer</td> <td>{{getBeamerString()}}</td> <td><img class="edit" src="../Images/Edit.png" alt=""/></td> </tr> ... </tbody> </table> </section> currentRuimte(CurrentRoom)是一个范围定义的变量,它使用从我的mongoDB获取数据的资源服务获取其值: function RuimteController($scope,$routeParams,Ruimte) { $scope.currentRuimte = Ruimte.get({ ruimteNaam: $routeParams.ruimteNaam }); $scope.getBeamerString = function () { var beamer = $scope.currentRuimte.beamer; if(beamer.aanwezig == 'Ja'){ return beamer.typeBeamer + ' (lamp: ' + beamer.datumLamp + ')'; }else{ return '-'; } } } 当我使用batarang检查范围我得到这个: 为什么我得到错误,为什么我仍然得到正确的输出?
问题在于
$scope.currentRuimte = Ruimte.get({ ruimteNaam: $routeParams.ruimteNaam }); 是异步操作。 $ scope.currentRuimte将在此调用返回时成为空白对象,稍后一段时间,当数据可用时,它将被HTTP响应填充。 这意味着您第一次渲染视图时,$ scope.currentRuimte将成为{},因此$ scope.currentRuimte.beamer将不会被定义,所以这一行: var beamer = $scope.currentRuimte.beamer; if(beamer.aanwezig == 'Ja'){ /* <-- undefined.aanwezig ! */ } 将会引起例外。您可以通过确保投标者真实地解决这个问题: $scope.getBeamerString = function () { var beamer = $scope.currentRuimte.beamer; if(beamer && beamer.aanwezig == 'Ja'){ return beamer.typeBeamer + ' (lamp: ' + beamer.datumLamp + ')'; }else{ return '-'; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |