Javascript 在控制器之间传递一个变量,并在同一页上使用ng repeat

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

我的一些措词可能不恰当,特别是关于angular/js术语(控制器、服务、工厂等),但希望它仍然可以理解。此外,这个问题有多个部分,这使得很难在一行中提问

我有3个文件:newRegistration.html、Registration.js和addressVerification.js

在newRegistration.html中,有一个表单,用户在其中输入他/她的电子邮件、电话、邮寄地址和其他内容,然后单击“下一步”。单击“下一步”时,将触发Registration.js(控制器?)

newRegistration.html

下面的代码片段是我想用addressVerification.js中的新数据更新的
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
            }
        }
    });