14

アプリは実行されますが、Angularデータオブジェクトは認識されません。

これが私が得ているJavaScriptエラーです:

Exception was thrown at line 1059, column 11 in ms-appx://28934b41-4dd2-4414-b9a9-
a73c11c1b743/js/angular.js
0x800a139e - JavaScript runtime error: No module: ngLocale
Exception was thrown at line 4473, column 9 in ms-appx://28934b41-4dd2-4414-b9a9-
a73c11c1b743/js/angular.js
0x800a139e - JavaScript runtime error: HierarchyRequestError
The program '[5112] WWAHost.exe' has exited with code 1 (0x1).

これがangular.jsの1059行目あたりの関数です。

return ensure(modules, name, function() {
    if (!requires) {
      throw Error('No module: ' + name);
    }

そして、これが4473行目の周りの関数です。

 if (parent) {
    parent.replaceChild(newNode, oldNode);
  }

私が遭遇した最初のエラーを修正することができました:

Unhandled exception at line 2031
 JavaScript runtime error: Unable to add dynamic content

すべてのangular.jsをでラップすることによってMSApp.execUnsafeLocalFunction

  MSApp.execUnsafeLocalFunction(function () {
          ....
      });   

これらのエラーは、Angular.jsホームページのtodoリストの例に従って作成したテストアプリからのものです。

それで?私が参加した無料のMicrosoftイベントによると、「サードパーティのJavaScriptフレームワーク/ライブラリをWindows 8アプリに追加するのは簡単です!」私はこれに不慣れかもしれません...しかし、これは非常に簡単ではないと思います!

Windows 8アプリでAngular.jsを使用することも可能ですか?

4

3 に答える 3

23

その理由は、Angularが<!-- -->ng-repeatおよび同様のディレクティブにhtmlコメントタグを配置するためです。残念ながら、Microsoftは、.innertHTMLを使用してJavascriptから入力した場合、これらは安全でないと見なし、許可されていません。これはここで見つけることができます:

http://msdn.microsoft.com/en-us/library/windows/apps/hh465388.aspx

これは、jQLiteの1534行目で発生します。

var div = document.createElement('div');
            // Read about the NoScope elements here:
            // http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx
            div.innerHTML = '<div>&#160;</div>' + element; // IE insanity to make NoScope elements work!
            div.removeChild(div.firstChild); // remove the superfluous div

何が起こるかという要素は

<!-- ngRepeat: item in arrayTest -->

次に、angularがdiv.innerHTML = ...を実行すると、要素が削除されます。div.removeChildにブレークポイントを設定すると、div.innerHTMLに要素がないことがわかります。

[編集]この応答を書いた後、私は追加してみました

MSApp.execUnsafeLocalFunction(function () { div.innerHTML = '<div>&#160;</div>' + element });

できます!どうやら、すべてのangularjsをMSApp.execUnsafeLocalFunctionでラップしてから、その行を具体的にラップする必要があります。

于 2012-10-28T05:07:27.243 に答える
4

ng-cspストアアプリのHTMLタグに追加することで機能しました。これにより、コンテンツセキュリティポリシーが有効になり、「eval」などが無効になります。jQuery(v2.1.1)とAngular(v1.3.0-beta.13)を使用しました。

詳細についてng-cspは、AngularJSのドキュメントをご覧ください。

于 2014-06-24T22:09:55.630 に答える
1

私の場合、angularjsをMSApp.execUnsafeLocalFunctionでラップし、ng-repeatではなくdata-ng-repeatのみを使用しました

于 2013-12-12T16:45:31.640 に答える