这整个周末,我很困扰,不理解为什么父控制器的功能没有被子控制器识别.
我很快意识到将控制器作为vm是原因:
<div data-ng-controller="ParentCtrl as vm">
<div data-ng-controller="Child1 as vm"></div>
<div data-ng-controller="Child2 as vm"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
当然,现在看来很明显,child1和2都不会在ParentCtrl中看到函数,如果我使用了之前没有vm的工作模式,而是使用$ scope,那么一切都会好的.
所以我的问题是"使用"vm"方法对任何人都有什么好处,如果它优于不使用它,怎么能在ParentCtrl中调用函数调用而不是发出?
谢谢
当我单击"检查"按钮时,以下代码抛出错误"TypeError:无法读取属性'$ pristine'的undefined".
app.controller('MainCtrl', function($scope) {
// other stuff
})
.controller('Ctrl2', function($scope) {
$scope.product = {description:'pump'};
$scope.output = 'unknown';
// uncomment to avoid undefined error, still can't see $pristine
// $scope.formHolder = {};
$scope.checkForm = function() {
$scope.descriptionTest = $scope.product.description;
if ($scope.formHolder.productForm.$pristine) {
$scope.output = 'yes';
}
if ($scope.formHolder.productForm.$dirty) {
$scope.output = 'no'
}
}
});
Run Code Online (Sandbox Code Playgroud)
HTML
<body ng-controller="MainCtrl">
<div >
<ng-include ng-controller="Ctrl2" src="'myForm.html'"></ng-include>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
myForm.html
<form name="productForm" novalidate>
<h2>myForm</h2>
description: <input type="text" name="description" ng-model="product.description"/>
<br>
<button ng-click="checkForm()">Check Form</button>
<br> …Run Code Online (Sandbox Code Playgroud) 我很困惑控制器何时实例化.此外,嵌套状态时控制器如何实例化.我可能会对范围如何附加到视图和控制器感到困惑,也就是说,如果每个视图都有自己的控制器和范围,或者它们共享相同的范围.
有人可以解释控制器何时实例化?在嵌套路由下,所有视图共享一个控制器和范围吗?当我切换状态并返回状态会发生另一个控制器实例化时会发生什么?
以下是我的路线(配置文件):
.config (googleAnalyticsCordovaProvider, $stateProvider, $urlRouterProvider, IdleProvider, KeepaliveProvider) ->
$stateProvider
.state('app', {
url: '/app',
abstract: true,
templateUrl: 'templates/menu.html',
controller: 'AppController'
})
.state('app.pincode', {
url: '/pincode',
views: {
menuContent: {
templateUrl: 'templates/pincode-yield.html',
controller: 'PincodeController'
}
}
})
.state('app.pincode.create', {
url: '/create',
views: {
pincode: {
templateUrl: 'templates/pincode-create.html',
controller: 'PincodeController'
}
}
})
.state('app.pincode.pincodeLogin', {
url: '/login',
views: {
pincode: {
templateUrl: 'templates/pincode-login.html',
controller: 'PincodeController'
}
}
})
.state('app.pincode.settings', {
url: '/settings',
views: {
pincode: {
templateUrl: 'templates/settings.html',
controller: 'PincodeController'
} …Run Code Online (Sandbox Code Playgroud) angularjs angularjs-scope angularjs-routing angular-ui-router
我正在使用TodoMVC应用程序来改进AngularJS框架.在第14-16行的index.html中,您会看到:
<form id="todo-form" ng-submit="addTodo()">
<input id="new-todo" placeholder="What needs to be done?" ng-model="newTodo" autofocus>
</form>
Run Code Online (Sandbox Code Playgroud)
请注意ng-submit指令如何在不将newTodo模型作为参数传递的情况下调用addTodo()函数.
不久之后,我在第19行的同一个文件中遇到了以下代码:
<input id="toggle-all" type="checkbox" ng-model="allChecked" ng-click="markAll(allChecked)">
Run Code Online (Sandbox Code Playgroud)
您可以看到作者此次决定将allChecked模型传递给markAll()函数.如果我理解正确,他们可以在控制器中引用$ scope.allChecked而不是传入它.
为什么在同一个文件中使用两种不同的方法?在某些情况下,一种方法更好吗?这是一个不一致的情况还是使用了更深层次的逻辑?
如果我没有正确措辞,我会提前道歉.我有一个ng-model内部文本框,ng-repeat当我尝试获取文本框值时,它始终是undefined.我只是希望它显示我在相应文本框中输入的内容.
它似乎是一个问题$scope,所以我如何使$scope.postText全局或控制器根级别,以便它可以访问?
这是帮助清理的JSFiddle:http://jsfiddle.net/stevenng/9mx9B/14/
我试图了解ng-if和范围.据我所知,ng-if创建了一个新的子范围.这是我的问题:
视图
<input ng-model="someValue1" />
<div ng-if="!someCondition">
<input ng-model="$parent.someValue2" />
</div>
Run Code Online (Sandbox Code Playgroud)
调节器
$scope.someCondition = true;
if ($scope.someCondition) {
$scope.someValue2 = $scope.someValue1;
}
Run Code Online (Sandbox Code Playgroud)
如果someCondition设置为true,则someValue2应与someValue1相同.
我的问题是我无法在两种情况下访问someValue2(true或false).我怎么能实现这个目标?
我正在尝试使用anugularJS生成一个n级分层无序列表,并且已经能够成功完成.但是现在,我在指令和控制器之间存在范围问题.我需要在指令模板中通过ng-click调用的函数中更改父类的scope属性.
请参阅http://jsfiddle.net/ahonaker/ADukg/2046/ - 这是JS
var app = angular.module('myApp', []);
//myApp.directive('myDirective', function() {});
//myApp.factory('myService', function() {});
function MyCtrl($scope) {
$scope.itemselected = "None";
$scope.organizations = {
"_id": "SEC Power Generation",
"Entity": "OPUNITS",
"EntityIDAttribute": "OPUNIT_SEQ_ID",
"EntityID": 2,
"descendants": ["Eastern Conf Business Unit", "Western Conf Business Unit", "Atlanta", "Sewanee"],
children: [{
"_id": "Eastern Conf Business Unit",
"Entity": "",
"EntityIDAttribute": "",
"EntityID": null,
"parent": "SEC Power Generation",
"descendants": ["Lexington", "Columbia", "Knoxville", "Nashville"],
children: [{
"_id": "Lexington",
"Entity": "OPUNITS",
"EntityIDAttribute": "OPUNIT_SEQ_ID",
"EntityID": 10,
"parent": "Eastern …Run Code Online (Sandbox Code Playgroud) 在这里,我使用ng-repeateg 动态生成一个html元素
<div ng-repeat="type in types">
<input type="checkbox" ng-model="{{type}}" />{{ type }}
</div>
Run Code Online (Sandbox Code Playgroud)
我想设置ng-model的类型值.是否有可能,或者我想为这样的ng-true-value设置该类型值
<div ng-repeat="type in types">
<input type="checkbox" ng-model="{{type}}" ng-true-value="{{type}}" />{{ type }}
</div>
Run Code Online (Sandbox Code Playgroud) 我在ng-repeater中有一个指令应该设置一个范围属性.请看这里的小提琴:http://jsfiddle.net/paos/CSbRB/
问题是scope属性是作为属性值给出的,如下所示:
<button ng-update1="inputdata.title">click me</button>
Run Code Online (Sandbox Code Playgroud)
该指令应该将scope属性inputdata.title设置为某个字符串.这不起作用:
app.directive('ngUpdate1', function() {
return function(scope, element, attrs) {
element.bind('click', function() {
scope.$apply(function() {
scope[ attrs.ngUpdate1 ] = "Button 1";
});
});
};
});
Run Code Online (Sandbox Code Playgroud)
但是,直接分配工作:
scope["inputdata"]["title"] = "Button 1";
Run Code Online (Sandbox Code Playgroud)
你能告诉我如何设置范围属性吗?指令中的符号表示法?
PS:小提琴使用转发器的原因是因为它使指令在子范围内.当它们位于子作用域中时,您无法写入作为基元的作用域属性.这就是为什么我需要一个带有"."的对象属性.在名字里.请参阅此处的详细解释:AngularJS中范围原型/原型继承的细微差别是什么?
谢谢
如何访问ng-repeat生成的范围集?
我认为这个问题的核心是我不明白这种关系如何在a)传递给ng-repeat指令的对象集合和b)它生成的作用域集合之间起作用.我可以玩(a),ng-repeat范围观察和拾取,但我如何设置范围本身的变量(b)?
我的用例是我有一组使用ng-repeat重复的元素,每个元素都有一个使用ng-show/ng-hide切换的编辑视图; 每个元素的状态保存在本地范围的变量中.我希望能够在特定元素上触发ng-show,但是我希望从ng-repeat 外部调用触发器,因此我需要能够访问本地范围变量.
任何人都可以指出我正确的方向(或告诉我,如果我正在吠叫错误的树)?
谢谢
更新: 下面的链接非常有用,谢天谢地.最后,我为每个重复元素创建了一个指令,并使用该指令的link函数将其作用域添加到根作用域的集合中.