我有一个显示产品的基本控制器,
App.controller('ProductCtrl',function($scope,$productFactory){
$productFactory.get().success(function(data){
$scope.products = data;
});
});
在我看来,我是在一个列表中显示这些产品
<ul>
<li ng-repeat="product as products">
{{product.name}}
</li>
</ul
我试图做的是,当有人点击产品名称时,我有另一个名为购物车的视图,该产品被添加。
<ul class="cart">
<li>
//click one added here
</li>
<li>
//click two added here
</li>
</ul>
我的疑问是,如何将点击的产品从第一个控制器传递到第二个控制器?我认为cart也应该是一个控制器。
我处理点击事件使用指令。我也觉得我应该使用服务来实现上述功能,只是不明白如何?因为购物车将被预定义的产品数量添加可能是5/10取决于哪个页面的用户。所以我想保持它的一般性。
更新:
我创建了一个广播服务,在第二个控制器我接收它。现在的问题是如何更新dom?因为我的产品清单是硬编码的。
var custApp = angular.module("custApp", [])
.controller('FirstController', FirstController)
.controller('SecondController',SecondController)
.service('sharedData', SharedData);
FirstController.$inject = ['sharedData'];
function FirstController(sharedData) {
this.data = sharedData.data;
}
SecondController.$inject['sharedData'];
function SecondController(sharedData) {
this.data = sharedData.data;
}
function SharedData() {
this.data = {
value: 'default Value'
}
}
第一个控制器
<div ng-controller="FirstController as vm">
<input type=text ng-model="vm.data.value" />
</div>
第二个控制器
<div ng-controller="SecondController as vm">
Second Controller<br>
{{vm.data.value}}
</div>
我已经创建了一个工厂来控制路由路径模式之间的共享作用域,因此您可以在用户在相同的路由父路径中导航时维护共享数据。
.controller('CadastroController', ['$scope', 'RouteSharedScope',
function($scope, routeSharedScope) {
var customerScope = routeSharedScope.scopeFor('/Customer');
//var indexScope = routeSharedScope.scopeFor('/');
}
])
因此,如果用户转到另一个路由路径,例如'/Support',路径'/Customer'的共享数据将被自动销毁。但是,如果用户去到“子”路径,比如“/Customer/1”或“/Customer/list”,作用域不会被销毁。
您可以在这里看到一个示例:http://plnkr.co/edit/OL8of9
var custApp = angular.module("custApp", [])
.controller('FirstController', FirstController)
.controller('SecondController',SecondController)
.service('sharedData', SharedData);
FirstController.$inject = ['sharedData'];
function FirstController(sharedData) {
this.data = sharedData.data;
}
SecondController.$inject['sharedData'];
function SecondController(sharedData) {
this.data = sharedData.data;
}
function SharedData() {
this.data = {
value: 'default Value'
}
}
第一个控制器
<div ng-controller="FirstController as vm">
<input type=text ng-model="vm.data.value" />
</div>
第二个控制器
<div ng-controller="SecondController as vm">
Second Controller<br>
{{vm.data.value}}
</div>