【问题标题】:function in child controller called from parent view从父视图调用的子控制器中的函数
【发布时间】:2014-06-04 10:01:29
【问题描述】:

我有一个设置控制器,负责保存我的网络应用程序的设置。

这个 SettingsController 有一个简单的 $scope.saveSettings 方法。设置控制器与 settings.html 相关联,定义如下:

.config(['$locationProvider','$routeProvider', function ($locationProvider, $routeProvider) {

    $routeProvider.when('/widgets', { templateUrl: 'partials/widgets.html', controller: 'widgetsController'});
    $routeProvider.when('/settings', { templateUrl: 'partials/settings.html', controller:'settingsController' });
    $routeProvider.otherwise({redirectTo: '/widgets'});
}])

如果我想在 settings.html 之外有一个“保存设置”按钮(例如在 main.html 中) 它们没有被调用,因为与主视图关联的主/父控制器对 saveSettings() 一无所知。

这样的事情可以做些什么?

我的 main.html 有
当路由路径为/settings时注入settings.html

【问题讨论】:

  • 您可以将 saveSettings() 放入 Service 并注入您需要的所有控制器
  • 一个简单的例子会有帮助吗?

标签: angularjs angularjs-scope angularjs-controller


【解决方案1】:

您应该将 saveSettings() 放入 Service 并注入所有需要使用 saveSettings() 函数的控制器:

  //define a settingService
    angular.module('myApp').factory('settingsService', function() {  
        return {
            saveSettings: function() { //save settings logic }
        };
    });


function aCtrl($scope, settingsService) {
    settingsService.saveSettings(); // call save settings function that is inside the service
}

function settingsCtrl($scope, theService) {   
        settingsService.saveSettings(); // call save settings function that is inside the service
}

有关服务的更多信息,请阅读HERE

【讨论】:

  • 这个问题是它需要访问父级的$scope,因为它隐藏了父级上的某些元素。当你不弄乱函数中的 $scope 时,服务和工厂工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 2019-09-07
相关资源
最近更新 更多