我有一个应用程序,我使用ngCart指令,以存储添加到篮子中的项目.问题是该指令只具有发送用户添加的项目信息的功能,但我还需要发送一些我将从表单中获取的信息.
因此,为了在单个对象中发送它,我首先需要将指令中存储的数据提取到我的主范围,然后将其与我从表单中获取的数据合并.
为此,我需要修改ngCart.js指令.我试图提供服务,正如这里所建议的那样,但我无法让它发挥作用.我在指令中添加的代码是这样的
.service('ngCartData', ['ngCart', function(ngCart){
return {
data:ngCart;
};
}])
Run Code Online (Sandbox Code Playgroud)
,但我得到一个错误说 Module 'ngCart' is not available!
我对角度服务和工厂都很陌生,所以我不确切地知道在哪里工作.我用我的代码制作了一个plunkr(我尝试ngCart.js使用上面的代码修改文件,但是plunkr显示了没有任何修改的指令).我只需要能够在范围ngCart中发送存储在指令中的数据,以便我可以在父控制器中监听它(参见plunkr中的checkout部分).
任何帮助将非常感激.谢谢!
小智 1
你的想法是正确的,但我很惊讶它对你不起作用。
我已按以下方式编辑了您的应用程序(在script.js)
app.controller('myCtrl', function($scope, ngCart, myCart) {
$scope.names = [...];
...
console.log(myCart.cart);
})
.factory('myCart',function(ngCart){
return {
cart: ngCart.$cart
};
})
Run Code Online (Sandbox Code Playgroud)
它已记录{shipping: 30, taxRate: null, tax: null, items: Array[2]},我认为这就是您所需要的(我在记录之前添加了 2 个项目)。
请注意,添加服务是多余的;您可以随时随地访问数据。只需将 ngCart 注入您的控制器/服务/等。并且更新后的数据将提供给您。
因此,以下代码是等效的:
app.controller('myCtrl', function($scope, ngCart) {
$scope.names = [...];
...
console.log(ngCart.$cart);
});
Run Code Online (Sandbox Code Playgroud)
出现错误的一个可能原因可能是,在编辑ngCart模块时,出现某种错误(如拼写错误),这导致ngCart对 Angular 不可见。