加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在加载视图时运行AngularJS初始化代码

发布时间:2020-12-17 09:06:55 所属栏目:安全 来源:网络整理
导读:当我加载一个视图,我想运行一些初始化代码在其相关的控制器。 为此,我对我的视图的主要元素使用了ng-init指令: div ng-init="init()" blah/div 并在控制器中: $scope.init = function () { if ($routeParams.Id) { //get an existing object }); } else
当我加载一个视图,我想运行一些初始化代码在其相关的控制器。

为此,我对我的视图的主要元素使用了ng-init指令:

<div ng-init="init()">
  blah
</div>

并在控制器中:

$scope.init = function () {
    if ($routeParams.Id) {
        //get an existing object
        });
    } else {
       //create a new object
    }

    $scope.isSaving = false;
}

第一个问题:这是正确的方法吗?

接下来的事情,我有一个问题发生的事件序列。在视图中,我有一个“保存”按钮,它使用ng-disabled指令:

<button ng-click="save()" ng-disabled="isClean()">Save</button>

isClean()函数在控制器中定义:

$scope.isClean = function () {
    return $scope.hasChanges() && !$scope.isSaving;
}

正如你所看到的,它使用$ scope.isSaving标志,它在init()函数中初始化。

PROBLEM:当视图被加载时,isClean函数在init()函数之前被调用,因此flag isSaving是未定义的。我能做些什么来防止这种情况?

当您的视图加载时,其关联的控制器也是如此。而不是使用ng-init,只需在控制器中调用init()方法:
$scope.init = function () {
    if ($routeParams.Id) {
        //get an existing object
    } else {
        //create a new object
    }
    $scope.isSaving = false;
}
...
$scope.init();

由于您的控制器在ng-init之前运行,这也解决了您的第二个问题。

Fiddle

正如John David五提到的,您可能不想将此附加到$ scope,以使此方法为私有。

var init = function () {
    // do something
}
...
init();

See jsFiddle

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读