私は何をしていますか?ng-bind-htmlの角1.4の解析内容
簡潔には私は$ scope.myDataというオブジェクトの配列と$ scope.layoutという文字列を持っています。私がしたいことは、ng-repeat="x in myData"
とまたng-bind-html="layout"
のスパンを持つことです。レイアウトはいくつかの点で{{ x.key }}
です。レイアウトをロードし、配列内の各オブジェクトの表示を開始し、変数を入力します。
具体的には、私はデータとレイアウトをAJAX(jQueryを使用)でロードしています。私はこのことがまったく問題なのかどうかはわかりません。
これまでのコードは?
$scope.layout
変数に私のHTMLをunsanitizeするには、angular-sanitize.jsが含まれています。また、app=angular.module()
宣言にngSanitize
を追加しました。
AJAXの下では、その部分が動作するので、実際にはif(status=='success'){}
内のものを読み取る必要があります。
<script type="text/javascript">
$(document).ready(function(){
$('a.doit').click(function(e){
e.preventDefault();
$.ajax({
method:'POST',
data:{'ajax':true},
url:'<?=URL('--url to load from--')?>'
}).always(function(data,status){
if(status=='success'){
var getelementby='[ng-app="myApp"]';
window.data=data;
angular.element(document.querySelector(getelementby)).scope().$apply(function($scope){
$scope.layout=window.data.layout;
$scope.myData=window.data.data;
});
}else{
console.log('Error :(');
}
});
});
});
var app=angular.module('myApp',['ngSanitize']);
app.controller('myCtrl',function($scope,$http){$scope.myData={};});
</script>
<a href="#" class="doit btn btn-default">Load</a>
<div ng-app="myApp" ng-controller="myCtrl">
<span ng-repeat="x in myData"><span ng-bind-html="layout"></span></span>
</div>
(私は私のエラーチェックは、これまでの粗である知っている)
それは何をしますか?レイアウトに正しい時間が表示されますが、式は{{ x.key }}
ではありません。
私は間違っていますか?私はすでに私のHTMLをunsanitizingしています。これはちょうど角度が働く方法ではありませんか?それを行う別の方法がありますか?
角度でjQuery ajaxを使用しないでください。サービスを試してみてください:https://docs.angularjs.org/guide/services –
私はあなたが「AngularJS way」ではないと思います。Angularでは、jQueryの使用量を最小限に抑える必要があります。最高はそれを決して使用しないことです。基本的なアプリの場合、それはまったく必要ありません。 (jQueryがディレクティブでそれを追加する必要がある場合)試したようなajaxリクエストでビューを読み込まないでください。これにはルータを使用する必要があります。 [angular-ui-router](https://github.com/angular-ui/ui-router)のドキュメントをご覧ください。 – AWolf
jQueryのclick()関数を使用しているためjQuery ajaxを使用していましたが、関数の内部で$ httpを使用する方法がわかりません –