在Angular中创建后立即调用控制器函数

时间:2014-05-28 15:04:02

标签: angularjs

我是AngularJS的新手,我在http://angular-ui.github.io/bootstrap/上创建了一个模态,只需点击一下按钮即可打开。但是,我还希望它在页面加载时直接打开,因为需要在模态中输入一些关键设置。为此,我在控制器初始化时直接调用open函数,我想知道这是好事还是坏事,因为我似乎无法找到更好的解决方案。

这是我的Javascript代码:

angular.module('myApp', ['ui.bootstrap'])

.controller('NavBarCtrl', ['$scope', '$modal', function($scope, $modal) {
    $scope.openSettings = function() {
        var settingsInstance = $modal.open({
            templateUrl: 'settingsTemplate',
            controller: 'SettingsInstanceCtrl',
            scope: $scope
        });
    }

    $scope.reset = function() {
        alert('Not implemented yet');
    };

    $scope.openSettings();
}])

.controller('SettingsInstanceCtrl', ['$scope', '$modalInstance', function($scope, $modalInstance) {
    $scope.closeSettings = function() {
        $modalInstance.dismiss('closed');
    }

    $scope.saveSettings = function() {
        //save
        $modalInstance.dismiss('saved');
    }
}]);

正如您在代码中看到的那样,当设置$ scope时,会立即调用控制器范围的closeSettings函数。任何反馈都会受到欢迎。

非常感谢!

1 个答案:

答案 0 :(得分:1)

这实际上取决于您是否希望在没有此行为的情况下在另一个视图/应用程序中重用此控制器:

是:您可以使用嵌套元素,例如

<span ng-init="openSettings()">

将调用控制器操作,或直接在同一元素上使用ng-init。

否:嗯,如果这是控制器工作的标准方式,我会一直这样做。

关于最佳做法,我建议将控制器拆分为单独的文件 如果你的应用变得更大,那么SettingsInstanceCtrl.js,NavBarCtrl.js。