我可以使范围扩展angularjs中的对象吗?

时间:2014-01-18 23:19:40

标签: javascript angularjs

说我写这样的应用程序:

<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不能在这种情况下扩展工作?如何让它正常工作?

1 个答案:

答案 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有上下文(因为它是你混合的前进,后退等的所有者)。