【问题标题】:Calling an angularjs function during controller init在控制器初始化期间调用 angularjs 函数
【发布时间】:2014-04-10 14:40:23
【问题描述】:

我继承了大量代码。它按照原始规范工作,因此尽管它可能是也可能不是“正确”的做事方式,但它确实有效,我不想弄乱它。 (我对 Angular 非常陌生,并且在紧迫的期限内 - 我现在没有时间“修复”没有损坏的东西,即使它们没有以“正确”的方式完成。)

我有一个复选框和一组地址字段。选中该复选框后,将运行一个填充地址字段的函数。

<input id='as_check' type="checkbox" ng-model='model.prepop_addr' ng-change="model.handlePrepopAddress()">
<input type="text" placeholder="Address 1" required ng-model='model.payment.addr1'/>
<input type="text" placeholder="Address 2" ng-model='model.payment.addr2'/>
<input type="text" placeholder="City" required ng-model='model.payment.city'/>
<input type="text" placeholder="State" required ng-model='model.payment.state'/>
<input type="text" placeholder="Zip" required ng-model='model.payment.zip'/>

在我的控制器中,我有一个名为 handlePrepopAddress() 的函数:

model.handlePrepopAddress = function () {
        if (model.prepop_addr) {
            console.log("prepop is true");
            var del_addr = $window.user_state.deliveryAddress;

            model.payment.addr1 = del_addr.address;
            model.payment.addr2 = null;
            model.payment.city = del_addr.city;
            model.payment.state = del_addr.state;
            model.payment.zip = del_addr.zip;
        } else {
            console.log("prepop is false");
            model.payment.addr1 = null;
            model.payment.addr2 = null;
            model.payment.city = null;
            model.payment.state = null;
            if (!model.payment.saved) {
                model.payment.zip = null;
            }
        }

        return true;
    };

当我单击复选框时,它会正确运行并更新各个字段。要求已经改变,客户现在希望复选框默认为选中状态,然后默认字段的值。我认为我可以在控制器的开头运行该函数,而不是复制代码,如下所示:

place_order.controller('AsCreditCardCtrl', ['$scope', 'PaymentModel', function ($scope, model) {
    $scope.model = model;
    model.prepop_addr = true;
    model.handlePrepopAddress();
}]);

函数正在运行,因为我在函数中的console.log 语句正在运行。但是视图没有更新;该复选框明显未选中,除了初始占位符值外,其他字段为空。

我错过了什么?如何使函数更新视图?

【问题讨论】:

  • 我猜你可以用 jquery $('#as_check').prop('checked', true);不过感觉有点不对。在 html 中设置“checked”怎么样?
  • 是的,你真的不应该混合使用 jquery 和 angular。仅在 html 中检查设置是行不通的;有些东西正在覆盖它。

标签: angularjs checkbox angularjs-view


【解决方案1】:

你可以试试

var i=  model.handlePrepopAddress();

它可能会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多