1

Angular の ng-show ディレクティブが $scope とどのように相互作用するかを完全には理解していないようです。配列が空のときに要素を非表示にしようとしています。私のhtmlは次のとおりです。

<h1>Tabs</h1>
<ul ng-hide="tabs.length == 0">
    <li ng-repeat="t in tabs">
        <img src="{{t.thumbnailurl}}" />
    </li>
</ul>

タブはこれです:

Array
    0: Object
        $$hashKey: "01H"
        created: "2013-08-20 20:15:00"
        thumbnailurl: "https://s3.amazonaws.com/xxxxx"
        __proto__: Object
    1: Object
        $$hashKey: "01J"
        created: "2012-07-09 23:26:49"
        thumbnailurl: "https://s3.amazonaws.com/xxxxx"
        __proto__: Object
    length: 2
    __proto__: Array[0]

ページをロードすると、ng-hide がコンソールに次の例外をスローし、匿名関数にメソッド「trim」がないことを示します。明らかに、Angular は内部のどこかを突いています。

TypeError: Object function () {

// If the string looks like an identifier, then we can return it as is.
// If the string contains no control characters, no quote characters, and no
// backslash characters, then we can simply slap some quotes around it.
// Otherwise we must also replace the offending characters with safe
// sequences.


        if (ix.test(this)) {
            return this;
        }
        if (/[&<"\/\\\x00-\x1f]/.test(this)) {
            return '"' + this.replace(/[&<"\/\\\x00-\x1f]/g, function (a) {
                var c = escapes[a];
                if (c) {
                    return c;
                }
                c = a.charCodeAt();
                return '\\u00' +
                    Math.floor(c / 16).toString(16) +
                    (c % 16).toString(16);
            }) + '"';
        }
        return '"' + this + '"';
    } has no method 'trim'
    at watchFnToHumanReadableString (http://b.gro/campaigns#/tabs/23402:706:30)
    at Object.$delegate.__proto__.$watch (http://b.gro/campaigns#/tabs/23402:735:28)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:13829:9
    at nodeLinkFn (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:4406:13)
    at compositeLinkFn (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:4015:15)
    at publicLinkFn (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:3920:30)
    at <error: illegal access>
    at Object.Scope.$broadcast (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:8307:28)
    at http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:7463:26
    at wrappedCallback (http://ajax.googleapis.com/ajax/libs/angularjs/1.0.7/angular.js:6846:59) <ul ng-hide="tabs.length == 0" class="ng-scope"> angular.js:5754

ng-hide/show docs によると、このディレクティブは非常に単純で、渡された真実/虚偽のステートメントを受け入れる必要があります。ここで何が間違っているのかわかりません....

4

1 に答える 1

4

だから、これを手に入れてください。これがFFで正しく起動していることに気付いた後、Chromiumで拡張機能を無効にし始めました。angularデバッガープラグインを無効にすると判明しました:https://chrome.google.com/webstore/detail/angularjs-batarang/ighdmehidhipcmcojjgiloacoafjmpfk、正しく起動します!

于 2013-09-09T19:52:25.830 に答える