angularjs not 檢查對像是否為空,適用於ng-show,但不適用於控制器?




ngif not (8)

if( obj[0] )

這個更清晰的版本可能是:

if( typeof Object.keys(obj)[0] === 'undefined' )

如果沒有設置對象屬性,結果將是未定義的。

我有一個JS對象聲明如此

$scope.items = {};

我還有一個$ http請求用項目填充這個對象。 我想檢測這個項目是否為空,看來ng-show支持這個...我輸入

ng-show="items"

神奇的是它的工作原理,我也想從控制器做同樣的事情,但我似乎無法得到它的工作,似乎我可能不得不迭代對象,看它是否有任何屬性或使用lodash或下劃線。

有其他選擇嗎?

我確實嘗試過

alert($scope.items == true);

但是當對像被創建並且使用$http填充時,它總是返回false,所以它不會以這種方式工作。


另一個簡單的單線:

var ob = {};
Object.keys(ob).length // 0

使用空對象字面量在這裡不是必要的,你可以使用null或undefined:

$scope.items = null;

這樣, ng-show應該繼續工作,並且在你的控制器中你可以做到:

if ($scope.items) {
    // items have value
} else {
    // items is still null
}

在您的$http回調中,您可以執行以下操作:

$http.get(..., function(data) {
    $scope.items = {
        data: data,
        // other stuff
    };
});

檢查空對象

$scope.isValid = function(value) {
    return !value
}

或者,如果使用lo-dash:_.empty(值)。

“檢查值是否為空。長度為0的數組,字符串或參數對像以及沒有自己可枚舉屬性的對像被視為”空“。”


你可以檢查項目的長度

ng-show="items.length"

在一個私人項目中寫了這個過濾器

angular.module('myApp')
    .filter('isEmpty', function () {
        var bar;
        return function (obj) {
            for (bar in obj) {
                if (obj.hasOwnProperty(bar)) {
                    return false;
                }
            }
            return true;
        };
    });

用法:

<p ng-hide="items | isEmpty">Some Content</p>

測試:

describe('Filter: isEmpty', function () {

    // load the filter's module
    beforeEach(module('myApp'));

    // initialize a new instance of the filter before each test
    var isEmpty;
    beforeEach(inject(function ($filter) {
        isEmpty = $filter('isEmpty');
    }));

    it('should return the input prefixed with "isEmpty filter:"', function () {
          expect(isEmpty({})).toBe(true);
          expect(isEmpty({foo: "bar"})).toBe(false);
    });

});

問候。


如果您無法將項目OBJ等於null,則可以這樣做:

$scope.isEmpty = function (obj) {
    for (var i in obj) if (obj.hasOwnProperty(i)) return false;
    return true;
};

並在視圖中可以做到:

<div ng-show="isEmpty(items)"></div>

你可以做

var ob = {};
Object.keys(ob).length

僅當您的瀏覽器支持ECMAScript 5.例如,IE 8不支持此功能。

有關更多信息,請參閱http://kangax.github.io/compat-table/es5/





angularjs-scope