所以这是我的问题,我在父控制器中有一些函数/变量
function parentController($scope) {
$scope.numberOfChildren = $scope.numberOfChildren + 1 || 1;
console.log($scope.numberOfChildren);
$scope.someFunction = function(argument) {
// do stuff
$scope.someVariable = result of the function
}
}
我在另外两个控制器中调用此控制器,这些控制器是指令控制器,而在同一视图中调用
function firstChildController ($scope, $controller) {
var aVariable = 1;
$scope.otherVariable = 10;
$controller('parentController', {$scope: $scope});
$scope.someFunction(aVariable);
}
function secondChildController ($scope, $controller) {
var aVariable = 6;
$scope.otherVariable = 11;
$controller('parentController', {$scope: $scope});
$scope.someFunction(aVariable);
}
我想要的是,不要分享两个孩子的父范围。 现在,只有一个父控制器的实例,所以当我在同一个视图上调用两个指令时,我得到$ scope.numberOfChildren === 2。 我想要的是这个父控制器被加载两次但是具有独立的范围($ scope.numberOfChildren === 1在每个子控制器中)
我设法在视图模板中使用ng-controller并删除$ controller调用,但我想以编程方式执行此操作。 (每次调用指令时,我都不想写相同的ng-controller代码。)
<div ng-controller="parentController">
<first-directive></first-directive>
</div>
<div ng-controller="parentController">
<second-directive></second-directive>
</div>
最后,为了保持项目代码的同质性,如果可能的话,我宁愿不使用this和vm来完成工作。
答案 0 :(得分:1)
parentController
不有自己的范围,当您以这种方式实例化$scope
时,它会对$controller('parentController', {$scope: $scope})
进行操作@IBAction func sendPressed(_ sender: AnyObject) {
let content = UNMutableNotificationContent()
content.title = "Hello"
content.body = "What up?"
content.sound = UNNotificationSound.default()
// Deliver the notification in five seconds.
let trigger = UNTimeIntervalNotificationTrigger.init(timeInterval: 5, repeats: false)
let request = UNNotificationRequest.init(identifier: "FiveSecond", content: content, trigger: trigger)
// Schedule the notification.
let center = UNUserNotificationCenter.current()
center.add(request) { (error) in
print(error)
}
print("should have been added")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let center = UNUserNotificationCenter.current()
center.requestAuthorization([.alert, .sound]) { (granted, error) in
}
}
查看这个简单的演示fiddle。
您的案例中的问题可能是由共享相同范围的指令引起的,因此,将相同的范围传递给父控制器。
答案 1 :(得分:0)
您期望与系统运行的方式完全相同:范围不在两个控制器之间共享。
在html中使用ng-controller时,将创建一个新的范围(控制器实例)。从上面的代码中,将创建两个控制器实例。 您可以通过向html添加{{$ id}} 来查看,并查看范围实例的ID。
<div ng-controller="parentController">
{{$id}}
<first-directive></first-directive>
</div>
<div ng-controller="parentController">
{{$id}}
<second-directive></second-directive>
</div>
如果您看到{{numberOfChildren == 2}}表示您的代码在某处错误,而不是通过共享范围问题。