【发布时间】:2016-05-05 06:05:10
【问题描述】:
我在做什么?
简要说明:我有一个名为 $scope.myData 的对象数组和一个名为 $scope.layout 的字符串。我想做的是与ng-repeat="x in myData" 和ng-bind-html="layout" 建立一个跨度。布局在几个位置有{{ x.key }}。我希望它加载布局,然后开始为数组中的每个对象显示它,并填写变量。
更具体地说:我正在通过 AJAX(使用 jQuery)加载数据和布局。我不确定这是否重要,因为其他一切正常。
到目前为止我有什么代码?
我在 $scope.layout 变量中包含了 angular-sanitize.js 以取消对我的 HTML 进行消毒。我还在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 进行了消毒。这不是角度的工作原理吗?还有其他方法吗?
【问题讨论】:
-
您不应该将 jQuery ajax 与 angular 一起使用。尝试使用服务:docs.angularjs.org/guide/services
-
我认为您这样做不是“AngularJS 方式”。使用 Angular,您应该将 jQuery 的使用减少到最低限度。最好的办法是永远不要使用它。对于基本应用程序,您根本不需要它。 (如果您需要 jQuery 将其添加到指令中。)您不应该像尝试的那样使用 ajax 请求加载视图。您应该为此使用路由器。请查看angular-ui-router 的文档。
-
我使用的是 jQuery ajax,因为我使用的是 jQuery 的 click() 函数,但我不确定在函数内部如何使用 $http
-
@AWolf 感谢您的意见。正如我在另一条评论中所说,这只是尝试向主要后端项目添加一个薄的角度层,但我现在看到我只是不明白角度是如何被使用得足够好来证明添加它是合理的这样的结局。不过谢谢
标签: javascript jquery html angularjs ajax