gpt4 book ai didi

javascript - Angular 模型失去了 ng-included 在指令中的范围

转载 作者:行者123 更新时间:2023-11-28 00:51:59 24 4
gpt4 key购买 nike

我不确定如何正确命名这个问题,所以就这样..

我正在尝试设置一种动态方式来使用 ng-include 方法更改指令内的模板。我已经设置了两个 Plunker 示例,虽然其中一个应该像另一个一样工作,但情况似乎并非如此。

两个示例的 HTML:

<!DOCTYPE html>
<html ng-app="myApp">

<head>
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
<script src="script.js"></script>
</head>

<body>
<main></main>
</body>

</html>

示例#1: http://plnkr.co/edit/bi3Plrm8xufuN79Nvajj?p=preview

我正在设置两个指令(一个是主指令,另一个是嵌套的子指令):

angular.module('myApp', ['Test']);
angular.module('Test', [])
.directive('main', [
function () {
return {
restrict: 'E',
template: '<input type="text" ng-model="myModel"><br><br><child></child>'
};
}
])
.directive('child', [
function () {
return {
restrict: 'E',
template: '<input type="text" ng-model="myModel">'
};
}
]);

简单。运行应用程序时,两个字段会随着模型的更改而分别填充。

示例#2: http://plnkr.co/edit/3ajcTyfJElEzbqvsWwBM?p=preview

HTML 保持不变,但 js 略有不同:

angular.module('myApp', ['Test']);
angular.module('Test', [])
.directive('main', [
function () {
return {
restrict: 'E',
template: '<input type="text" ng-model="myModel"><br><br><child></child>'
};
}
])
.directive('child', [
function () {
return {
restrict: 'E',
controller: function($scope) {
$scope.myTemplate = 'test-template.html'
},
template: "<div ng-include='myTemplate'></div>"
};
}
]);

测试模板.html:

<input type="text" ng-model="myModel">

这一次,如果我与生成的第一个输入交互,两个输入将分别按其应有的方式更新。这是它变得有趣的时候......当/如果我与第二个输入(由 ng-include 生成的输入)交互时,我会松开所有绑定(bind)。永远...几乎就像它创建了自己的模型版本一样。之后,更改第一个输入不会影响第二个输入。

这里发生了什么?它确实创建了 myModel 的新实例吗? ?如果是这样,使用此ng-include时如何避免这种情况?方法?

最佳答案

这并不奇怪,正如 PSL 所说,ng-include 创建新范围。

如果您想创建保持这些模型附加的行为,你应该改变

<input type="text" ng-model="myModel">

致:

<input type="text" ng-model="$parent.myModel">

关于javascript - Angular 模型失去了 ng-included 在指令中的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26661407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com