ngif中的动态变量不起作用

时间:2015-10-06 17:15:55

标签: angularjs angular-ng-if

我有一段像这样的代码

ng-show="!edit{{id}} && imageUrl"

但这似乎不起作用。

ng-show="!edit1 && imageUrl" 

的工作原理。语法是否有任何问题?

实际代码

template: '<div id="dropTarget{{imageid}}" ng-show="edit{{imageid}}">'+
            '<img id="imageView{{imageid}}" ng-src="{{imageUrl}}" />'+
        '</div>'+
        '<img id="imageView{{imageid}}" ng-if="!edit{{imageid}} && imageUrl" ng-src="{{imageUrl}}" alt="Coach"/>'+
        '<div class="my-new-photo" ng-if="!edit{{imageid}} && !imageUrl">+</div>'+
        '<span class="edit-info" ng-click="showUploadImageOptions(imageid)" ng-show="!edit{{imageid}} && imageUrl">EDIT</span>'+
        '<span class="edit-info" ng-click="showUploadImageOptions(imageid)" ng-show="!edit{{imageid}} && !imageUrl">NEW</span>'+
            '<div ng-show="edit1" class="buttons-section">'+
                '<form enctype="multipart/form-data" method="post">'+
                    '<input type="file" name="filesToUpload{{imageid}}" id="filesToUpload{{imageid}}" style="display:none;"/>'+
                    '<span class="upl-sav-can" ng-click="uploadImage(imageid)">Browse</span>'+
                    '<span  class="upl-sav-can" ng-click="revertImage(imageid)">Cancel</span>'+
                '</form>'+
            '</div>',

3 个答案:

答案 0 :(得分:2)

你想要做的是不可能的。正如@dfsq所说,ngShow需要Angular表达式。您无法通过在Angular表达式中插入其名称来访问范围变量。

您最好的选择是使edit成为一个数组或一个对象,然后通过索引或键访问它的内容。

ng-show="!edit[id] && imageUrl"

答案 1 :(得分:1)

FDate_Time.Modified := (FDate_Time.Modified) or (not SameDateTime(FDate_Time.FieldValue, FCalendarEdit.Date + FTimeEdit.Time)); 期望Angular expression 常规javascript表达式(有一定限制)。所以想想你在这些情况下所写的内容,就像普通的javascript表达一样。

现在问问自己:ngShow是否有效的javascript表达式(代码)?当然不。当提供的表达式无法被解析和评估($parse服务执行此操作)作为有效的JavaScript代码时,Angular会抛出错误。

然而

!edit{{id}} && imageUrl

是使用括号表示法访问对象/数组的变量属性的有效表达式。这是您在这种情况下需要使用的内容。

答案 2 :(得分:0)

为什么不做正确的事情并为该返回值调用方法?

部分代码:

<span class="edit-info" ng-click="showUploadImageOptions(imageid)" ng-show="returnEditId(imageid) && imageUrl">EDIT</span>

JS:

    $scope.returnEditId = function(id){
        if(!$scope.edit[id])
         return false;
        else
         return true;
    }