2014-01-18 28 views
5

說我寫一個應用程序是這樣的:我可以讓作用域在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> 

現在我想,所以我決定使用angularJS添加UI。所以,我寫這篇文章:

<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

'$ .extend'可以正常工作..但是...閱讀/觀看[this](https://github.com/angular/angular.js/wiki/Understanding-Scopes)。 – calebboyd

+1

爲什麼?!?爲什麼通過從代碼中刪除空格刺傷我們的眼睛? http://static4.wikia.nocookie.net/__cb20120328010203/adventuretimewithfinnandjake/images/b/b2/My_eyes.gif – hypno7oad

+0

你在說什麼@ hypno7oad? –

回答

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具有上下文(因爲它你混入的前鋒,後衛等)。

+0

謝謝,但我不認爲這很簡單。問題是我的函數使用了關鍵字'this',我意識到它並沒有在擴展它的時候指向範圍......它對我來說是不可預知的,它將引用......它似乎指的是控制器,當我用console.log測試 –

+0

已更新的答案。 – calebboyd

+0

你贏了這一輪,calebboyd ... –

相關問題