2016-04-03 155 views
0

这里是JS小提琴:https://jsfiddle.net/q6rqk90s/(并非JsFiddle.com工作,但它在我的电脑上做我自己的服务器上,并在(本地工作))AngularJS - 打印更改为页

AngluarJS CODE

angular.module('RealParkClicker', []) 
    .controller('ParkController', ParkController) 
    .directive('messageBox', messageBox); 


function ParkController($scope){ 

    $scope.title = 'Real Park Clicker - Run your own park, anywhere you are!'; 
    $scope.promo = 'Start clicking and you can buy these rides!'; 

$scope.parkOwner = "Add your name"; 
$scope.parkName = "Add park name"; 
$scope.parkOpen = true 


$scope.ownedRides = 0 
$scope.totalGuests = 0 
$scope.allTheGuests = 0 

$scope.rides = [ 

     { 
     name: "Merry Go Round", 
     price: 10, 
     gpm: 1, 
     img: 'img/merrygoaround.jpg', 
     owned: 0 
     }, 

     { 
     name: "Swinging Ship", 
     price: 20, 
     gpm: 5, 
     img: 'img/swingingship.jpg', 
     owned: 0 
     }, 
     { 
     name: "Free Fall Tower", 
     price: 40, 
     gpm: 10, 
     img: 'img/freefall.jpg', 
     owned: 0 
     }, 
     { 
     name: "Log Flume", 
     price: 50, 
     gpm: 15, 
     img: 'img/logflume.jpg', 
     owned: 0 
     } 

     ]; 




$scope.changeOwner = changeOwner; 
$scope.changeParkName = changeParkName; 
$scope.addGuest = addGuest; 
$scope.buyRide = buyRide; 
$scope.sellRide = sellRide; 
// $scope.generateGuests = generateGuests 

$scope.$watch('totalGuests', function(newValue, oldValue){ 
     $scope.totalGuests = newValue; 

}); 


function changeOwner(){ 
    $scope.parkOwner = $scope.newOwner 
    $scope.newOwner = ''; 


} 

    function changeParkName(){ 
    $scope.parkName = $scope.newParkName 
    $scope.newParkName = ''; 


} 


function addGuest(){ 
    $scope.totalGuests++ 
    $scope.allTheGuests++ 
} 

function buyRide(index){ 
    if($scope.totalGuests === $scope.rides[index].price || $scope.totalGuests > $scope.rides[index].price) { 
    $scope.rides[index].owned +=1; 
    $scope.totalGuests -= $scope.rides[index].price; 
    $scope.ownedRides +=1; 
    // generateGuests($scope.rides[index].gpm); 

    var rideGPM = $scope.rides[index].gpm; 
    // var testMessage = "HELLO!" 

    setInterval(function(){ generateGuests(rideGPM); }, 3000); 

} 


} 

function sellRide(index){ 
if($scope.rides[index].owned > 0) { 
$scope.rides[index].owned -=1; 
$scope.totalGuests += $scope.rides[index].price 
$scope.ownedRides -=1; 
console.log($scope.rides[index]) 
} 

} 




function generateGuests(number){ 
    var rideGPM = number 
    $scope.totalGuests += rideGPM; 
    console.log($scope.totalGuests); 
} 



} 


ParkController.$inject = ['$scope']; 

function messageBox(){ 
    return { 
     restrict: 'E', 
     template: '<div><input ng-model="newMessage"/><button ng-click="sendMessage()">Send</button></div>', 
     controller: 'ChatController' 
    }; 
} 

index.html的代码

<!doctype html> 
<html> 
    <head> 
     <link href="https://s3.amazonaws.com/codecademy-content/projects/bootstrap.min.css" rel="stylesheet" /> 
    <link href='https://fonts.googleapis.com/css?family=Roboto:500,300,700,400' rel='stylesheet' type='text/css'> 
    <link href="css/main.css" rel="stylesheet" /> 
    <title>Real Park Clicker</title> 
    <script src="js/angular.min.js"></script> 
    <script src="js/app.js"></script> 
    </head> 
    <body ng-app="RealParkClicker"> 
    <div ng-controller="ParkController"> 
    <div class="header"> 
     <div class="container"> 

     <h1>Real Park Clicker</h1> 

     <h2>Park Name: {{parkName}}</h2></br> 

    <input ng-model="newParkName"/> 
    <button ng-click="changeParkName()">Set Park Name</button> 


    <h3>Park owner: {{parkOwner}}</h3> 

    <input ng-model="newOwner"/> 
    <button ng-click="changeOwner()">Set owner</button> 

     </div> 
    </div> 


    <div class="main" ng-controller="ParkController"> 
     <div class="container"> 

     <h2>{{promo}} <button ng-click ="addGuest()">Add 1 Guest</button> {{totalGuests}}</h2> 

     <div ng-repeat="ride in rides track by $index" class="col-md-6"> 
        <div class="thumbnail"> 
      <img ng-src="{{ride.img}}"> 
      <p class="title">{{ride.name}}</p> 
      <p class="price">{{ride.price}} Guests 
      </p> 
      <p class="gpm">This ride generates {{ride.gpm}} guests per second.</p> 
      <p class="owned"> You own {{ride.owned}} of this ride</p> 
      <div class="store"> 
       <p class="buy" ng-click="buyRide($index)">Buy</p> 
       <p class="sell" ng-click="sellRide($index)">Sell</p> 



      </div> 
     </div> 


     </div> 
    </div> 

     <center> 
     <h3>Park Stats</h3> 
     <ul> 
      <li>Total owned Rides: {{ownedRides}}</li> 
      <li>User Generated Guests In Total: {{allTheGuests}}</li> 
     <ul> 
     </center> 

    <div class="footer"> 
     <div class="container"> 
     <h2>Available for iPhone and Android.</h2> 
     <img src="https://s3.amazonaws.com/codecademy-content/projects/shutterbugg/app-store.png" width="120px" /> 
     <img src="https://s3.amazonaws.com/codecademy-content/projects/shutterbugg/google-play.png" width="110px" /> 
     </div> 
    </div> 
    </div> 


    </body> 
</html> 

我正在构建一个“点击方式”游戏,用户点击“添加1位游客”,代码将添加1位游客到$ scope.totalGuests。 如果他们有足够的客人,他们可以买一个游乐场,例如,10位客人是一个快乐的回合。

每一次乘车都会产生每秒钟X次的客人数量,“欢乐回合”每秒产生1位客人。

现在,我已经成功地构建了一段代码,当我使用console.log时系统工作正常。 唯一的是,我似乎无法反映页面本身的$ scope.totalGuests更改。 但是,一旦我点击按钮添加一个客人,页面上的数字就会添加1个客人+自动生成的金额。

我希望{{totalGuests}}在每次代码自动生成访客时自动更新页面。无论如何要做到这一点?我想有,但我还没有找到它。

我试过无数的东西,但我无法弄清楚,我试过$ watch和使用ng-onchange,但似乎没有任何工作。

非常感谢你们提前!

+0

尽量不要在'ParkController'内嵌入'ParkController' - 这可能会以困难的方式混淆范围。 – Bigood

+0

谢谢我要试试这个! –

回答

1

你的问题是角度不知道它需要更新显示的值,因为你的generateGuest函数被调用setInterval,所以代码运行在角度上下文之外。

我想简单地使用角度$interval函数而不是setInterval,(或$timeout如果您角的版本没有$interval)应该解决您的问题。

你可以通过阅读关于$scope.$apply$scope.$digest了解更多关于这是为什么。

+0

谢谢,这似乎是最合乎逻辑的事情。 我已经编写了$ interval脚本并将其放在ParkController函数中,但它不起作用,控制台给了我“$ interval不是一个函数”。我想我注入了错误。 我试过了。 ParkController函数($ scope,$ interval){ 和 ParkController。$ inject = ['$ interval']; 但他们都似乎没有工作。 –

+0

它适用于'功能ParkController($ scope,$ interval){'和'ParkController。$ inject = ['$ scope','$ interval'];'。我不确定第二部分是多么有用,因为角度会根据参数的名称自动知道要注入什么。 更新的小提琴:https://jsfiddle.net/q6rqk90s/2/ – yeahwhat