2013-03-01 66 views
3

我只是尝试AngularJS。我尝试做一些非常简单的事情,但我想这样做的好方法。AngularJS手表服务价值变化而不是范围继承

我得到了一个表格中的项目列表,其中显示了每个项目的名称和数量。 我有一个表格下的表格。

当我从表中点击一个项目名称时,我希望给定的项目可以通过表单更新。

我实现做范围继承的东西,如小提琴http://jsfiddle.net/5cRte/1/

查看:

<tr ng-repeat="item in items"> 
    <td><a href="#" ng-click="selectCurrentItem(item)">{{item.name}}</a></td> 
    <td>{{item.quantity}}</td> 
</tr> 

控制器:

function ItemListController($scope){ 
    $scope.items = [{name:'item1', quantity:10}, {name:'item2', quantity:5}]; 

    $scope.selectCurrentItem = function(currentItem) { 
     $scope.currentItem = currentItem; 
    } 
} 

function ItemFormController($scope){ 
    $scope.$watch('currentItem', function() { 
     $scope.item = $scope.currentItem; 
    }); 
} 

但我在一些议题看,它不是一个以这种方式结合控制器作用域的好习惯,最好我不想使用服务来存储控制器之间共享的变量。

我能够在一个服务中放置一个静态变量,并在另一个控制器中检索它,但是当从表中点击该项目时,我无法更新它,因为看不到服务变量。你有提示吗?

在此先感谢

回答

3

我不知道这是否是最佳的,但这个我能想出

angular.module('myApp', []); 

angular.module('myApp').factory('myService', function(){ 
    var items = [{name:'item1', quantity:10}, {name:'item2', quantity:5}, {name:'item3', quantity:50}]; 
    var current = {}; 
    return { 
     getItems: function(){ 
      return items; 
     }, 

     setCurrentItem: function(item){ 
      current.item = item; 
     }, 

     removeCurrentItem: function(){ 
      delete current.item; 
     }, 

     getCurrent: function(){ 
      return current; 
     } 
    } 
}); 

function ItemListController($scope, myService){ 
    $scope.items = myService.getItems(); 

    $scope.selectCurrentItem = function(currentItem) { 
     myService.setCurrentItem(currentItem); 
    } 
} 

function ItemFormController($scope, myService){ 
    $scope.current = myService.getCurrent(); 
} 

演示:Fiddle

+0

嗨,它涉及到解决我是什么试图去做。我只是不明白为什么它不起作用,而不是getCurrent我有一个getCurrentItem然后返回current.item在第一个地方? – 2013-03-01 14:37:18

+2

@StephaneToussaint:因为如果在ItemFormController的作用域中设置了当前值,则它正在监视当前的更改(在本例中通过更改current.item)。但是,如果直接将current.item设置为范围,范围无法捕捉更改,因为从技术上讲,您将另一个对象设置为变量,但不在控制器的范围内(JavaScript中不支持更改变量的引用)。我希望这个例子能够更好地解释:http://jsfiddle.net/q5BQt/ :) – JakubKnejzlik 2013-05-05 09:46:26

+0

谢谢你的评论。这听起来很明显。 – 2013-05-07 17:53:48