说我写这样的应用程序:
<script>
myArray=<?php echo $array;?>;
app={
myArray:myArray,
myIndex:myArray.length-1,
back:function(){this.myIndex--;console.log("You clicked back");},
forward:function(){this.myIndex++}
}
</script>
现在我想添加一个UI,所以我决定使用angularJS。所以我写这个:
<div ng-app="myApp">
<div ng-controller="AppCtrl">
<div ng-repeat="value in myArray | slice:myIndex:myIndex+1">
<div ng-cick="back()">Back</div>
<div ng-bind="value"></div>
<div ng-cick="forward()">Forward</div>
</div>
</div>
</div>
我也得到了这个
var myApp=angular.module('myApp', [])
myApp.filter('slice', function() {
return function(arr, start, end) {
return arr.slice(start, end);
};
});
myApp.controller("AppCtrl",function($scope){
$.extend($scope,app);
})
然后我单击后退按钮,控制台记录“您点击后退”,但值不会改变。为什么JQuery不能在这种情况下扩展工作?如何让它正常工作?
答案 0 :(得分:4)
$.extend
会正常工作..但是......你真的不需要它..阅读/观看this。
要解决您的问题......请执行以下操作:
myApp.controller("AppCtrl",function($scope){
$scope.app = app;
})
和
<div ng-controller="AppCtrl">
<div ng-repeat="value in app.myArray | slice:app.myIndex:app.myIndex+1">
<button ng-click="app.back()">Back</button>
<div>{{value}}</div>
<button ng-click="app.forward()">Forward</button>
</div>
</div>
希望指出你正确的方向。
<强>更新强>
一种解决方案是将控制器用作语法......所以
myApp.controller("AppCtrl",function(){
angular.extend(this,app);
})
和
<div ng-controller="AppCtrl as app">
<div ng-repeat="value in app.myArray | slice:app.myIndex:app.myIndex+1">
<button ng-click="app.back()">Back</button>
<div ng-bind="value"></div>
<button ng-click="app.forward()">Forward</button>
</div>
</div>
在第一个例子中$scope.app
有上下文(因为它是你混合的前进,后退等的所有者)。