Javascript 在控制器之间传递一个变量,并在同一页上使用ng repeat
我的一些措词可能不恰当,特别是关于angular/js术语(控制器、服务、工厂等),但希望它仍然可以理解。此外,这个问题有多个部分,这使得很难在一行中提问 我有3个文件:newRegistration.html、Registration.js和addressVerification.js 在newRegistration.html中,有一个表单,用户在其中输入他/她的电子邮件、电话、邮寄地址和其他内容,然后单击“下一步”。单击“下一步”时,将触发Registration.js(控制器?) newRegistration.html 下面的代码片段是我想用addressVerification.js中的新数据更新的Javascript 在控制器之间传递一个变量,并在同一页上使用ng repeat,javascript,jquery,angularjs,angularjs-ng-repeat,smartystreets,Javascript,Jquery,Angularjs,Angularjs Ng Repeat,Smartystreets,我的一些措词可能不恰当,特别是关于angular/js术语(控制器、服务、工厂等),但希望它仍然可以理解。此外,这个问题有多个部分,这使得很难在一行中提问 我有3个文件:newRegistration.html、Registration.js和addressVerification.js 在newRegistration.html中,有一个表单,用户在其中输入他/她的电子邮件、电话、邮寄地址和其他内容,然后单击“下一步”。单击“下一步”时,将触发Registration.js(控制器?) new
ng repeat
这是一条可能相关的线:
addressVerification.verify(user).then(function (userObj)
addressVerification.js
使用Smartystreets API更正/建议邮寄地址
我不知道如何将此模块中的变量传递到Registration.js(作用域变量[?]所在的位置),以便在newRegistration.html中填充ng repeat
我现在很糊涂。我想我已经给出了所有必要的细节。我希望我知道从哪里开始。我读了所有关于延迟对象、ng repeat和控制器的内容,但这让我很困惑
感谢您的帮助。您正在将addressVerification注入RegistrationCtrl。注入RegistrationCtrl的addressVerification的值是通过执行此处定义的函数返回的值:
angular.module('appname')
.factory('addressVerification', function($q, userIdentity, $http, smartyToken)
因此,您可以在RegistrationCtrl.js文件中访问addressVerification.js文件中发生的内容,方法是向在该函数中返回的任何内容添加方法
在RegistrationCtrl中拥有数据后,可以通过将数据附加到RegistrationCtrl内的作用域,从视图中访问数据。例如:
这将进入RegistrationCtrl.js:
$scope.someItems = [1, 2, 3, 4];
这将出现在以下视图中:
<li ng-repeat="item in someItems">{{item}}</li>
{{item}
我实现这一点的方法是公开工厂的方法,允许依赖它的控制器(以及控制器的视图)在同一工厂中存储值
例如,在以下代码中,customers
工厂的setCurrent
方法在工厂中存储一个值,current
。因为工厂是单例的,所以将在应用程序中持续存在。即使在用户单击
(在下面的示例中)并将其带到href=“/”
,存储在客户中的值。如果同一工厂是两个控制器的依赖项,则当前的
将可供“/”路由的控制器访问
模板
<ul>
<li>{{customers.current.name}}</li>
<li
ng-repeat="customer in customers.all"
>
<a
class="action name"
ng-click="customers.setCurrent(customer)"
href="/"
>
{{customer.name}}
</a>
</li>
</ul>
工厂
angular
.module('CollectionCustomers', [
])
.factory("CollectionCustomers", function(Restangular, ModelCustomer, $location) {
return {
all : [],
current : null,
setCurrent : function() {
// Affect this.current
}
}
});
谢谢你的回复。我有些困惑,因为整个文件(addressVerification.js)被包装在一个return语句中,然后在最后还有一个“return deferred.promise”语句。这听起来很熟悉吗?还有,在我返回的内容中添加方法是什么意思?你能发布addressVerification.js的样子吗?如果它返回一个对象(即:return{…}),那么您可以向它添加方法并在控制器内访问这些方法。编辑问题以包括整个addressVerification。jsSo addressVerification返回一个具有Verification属性的JavaScript对象。如果要从控制器内部执行代码,可以添加其他属性或重构对象以使用其他方法。
<li ng-repeat="item in someItems">{{item}}</li>
<ul>
<li>{{customers.current.name}}</li>
<li
ng-repeat="customer in customers.all"
>
<a
class="action name"
ng-click="customers.setCurrent(customer)"
href="/"
>
{{customer.name}}
</a>
</li>
</ul>
angular
.module('CtrlCustomerList', [
'CollectionCustomers',
])
.controller('CtrlCustomerList', function($scope, CollectionCustomers) {
$scope.customers = CollectionCustomers;
});
angular
.module('CollectionCustomers', [
])
.factory("CollectionCustomers", function(Restangular, ModelCustomer, $location) {
return {
all : [],
current : null,
setCurrent : function() {
// Affect this.current
}
}
});