该API参考范围页面说:
范围可以从父范围继承.
该开发者指南范围页说:
范围(原型)从其父范围继承属性.
那么,子范围是否始终从其父范围继承原型?有例外吗?当它继承时,它是否总是正常的JavaScript原型继承?
javascript inheritance prototype prototypal-inheritance angularjs
我有一个在我的应用程序中的多个视图共享的子窗体.在一个视图中,此子窗体单独显示,底部有一个后退/继续按钮,引导用户进入下一个子窗体.在另一个视图中,子窗体显示在与其他子窗体相同的页面上(基本上是一个长格式).
由于子窗体的html在两个视图中都是100%相同,因此我将其分成部分并ng-include用于渲染它.在仅显示带有后退/继续按钮的子窗体的视图中,我在父HTML的内部渲染后退/继续按钮.
在视觉上,一切正常,我能够访问在表单(user.email, user.password, user.etc...)中输入的所有数据.
问题是我根据用户是否正确填写了表单来启用/禁用"继续"按钮,这在"仅子表单"变体中不起作用,因为父作用域似乎没有能够访问表单的状态.如果我将按钮粘贴在局部,它可以工作,但我不想这样做,因为按钮不属于每个使用此部分的实例.
在我的示例中请注意,红色边框内的提交按钮被禁用,直到在框中键入内容并且"表单无效?" 值更新,而蓝色边框内的按钮始终启用和"表格无效?" 价值是空白的.
如何myForm.$invalid从父作用域访问值?
我有这条路线.
// index.html
<div ng-controller="mainCtrl">
<a href='#/one'>One</a>
<a href='#/two'>Two</a>
</div>?????????
<div ng-view></div>
Run Code Online (Sandbox Code Playgroud)
这就是我将部分加载到我的中的方法ng-view.
// app.js
?var App = angular.module('app', []);???????
App.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/one', {template: 'partials/one.html', controller: App.oneCtrl});
$routeProvider.when('/two', {template: 'partials/two.html', controller: App.twoCtrl});
}]);
Run Code Online (Sandbox Code Playgroud)
当我单击链接时,它会在ng-view中显示相应的标记.但是当我尝试包含partials/two.html内部partials/one.html使用时ng-include,它会正确显示它但会创建一个不同的范围,因此我无法与它进行交互.
// partials/two.html - markup
<div ng-controller="twoCtrl">I'm a heading of Two</div>
// partials/one.html - markup
<div ng-controller="oneCtrl">I'm a heading of One</div>
<div ng-include src="'partials/two.html'"></div>
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?或者还有其他方法可以达到相同的效果吗?
我有以下代码:
<div modal="modal.shouldBeOpen" close="close()" options="opts">
<div class="modal-body">
<form novalidate name="itemForm" style="margin-bottom: 0px;">
Run Code Online (Sandbox Code Playgroud)
哪个包含在包含的文件modal.html中
<div data-ng-controller="AdminController">
<ng-include src="'/Content/app/admin/partials/grid-subject.html'"></ng-include >
<ng-include src="'/Content/app/admin/partials/modal.html'"></ng-include>
</div>
Run Code Online (Sandbox Code Playgroud)
在我的AdminController控制器中,我尝试使用以下代码将表单重置为pristine:
$scope.itemForm.$setPristine();
Run Code Online (Sandbox Code Playgroud)
当我这样做时,它告诉我"itemForm"是未定义的.
有没有办法可以将表单的内容设置为pristine.我认为这是一个范围问题,但我不知道如何解决它.我尝试了一种解决方案,即删除第二个包含并直接粘贴代码.此解决方案有效.
但是我们希望能够重用代码,所以我希望能够使用include for modal.html来实现这一点
请注意,我们想要这样做的原因是因为我们的modal.html上有以下内容:
<button
class="btn float-right"
data-ng-disabled="itemForm.$pristine"
data-ng-click="modalReset()"
data-ng-show="modal.resetButton">
Reset</button>
</form>
Run Code Online (Sandbox Code Playgroud)
所以我们实际上是在itemForm里面,并希望从里面的按钮将它设置为$ pristine.
我正在构建一个演示天气应用程序,通过使用控制器/提供者和 2 个指令,(具有独立的范围,一个用于渲染一周值得预测的指令和另一个用于在页面顶部显示点击的工作日预测的指令)。
单击工作日之一时,我试图在屏幕顶部显示单击的工作日。如果我删除指令中的隔离范围,这可以正常工作,但是它不适用于适当的隔离范围。
有人可以建议我在这里缺少什么吗?
链接:具有独立作用域的指令:http : //plnkr.co/edit/L9AcMv ? p=preview(这不起作用?我在这里缺少什么?)
代码供您参考:
app.directive('myWeather', function() {
return {
restrict: 'EA',
transclude: 'true',
//If I comment below scope then it works fine though it does not if I am using isolated scope
scope: {
place: '=' //Two-way data binding
},
templateUrl: 'my-weather.html'
};
});
app.directive('selectedWeather', function() {
return {
restrict: 'EA',
transclude: 'true',
//If I comment below scope then it works fine though it does not if I …Run Code Online (Sandbox Code Playgroud)