【发布时间】:2016-05-03 14:35:30
【问题描述】:
我已经阅读了几篇文章,但没有找到解决我问题的示例。
我的理解是:
-
ng-if和ng-repeat创建隔离范围。 - 使用
$parent.someProperty不好。 - 使用
$parent.$parent.someProperty将是可憎的。
那么,使用给定的模板标记,我怎样才能正确绑定控制器以便控制器属性更新?
标记:
(注意嵌套的ng-if 和ng-repeat,创造了一种$parent.$parent 的情况)
<div ng-app="MyApp" ng-controller="MyCtrl">
<div ng-if="showOnCondition">
<label ng-repeat="item in repeatingItems">
{{item}}
<setting item="item" />
</label>
</div>
{{checkSetting()}}
</div>
JavaScript
var myApp = angular.module('MyApp', []);
myApp.controller('MyCtrl', function($scope) {
$scope.settings = {
someProperty: '',
anotherProperty: 'Hello'
}
$scope.repeatingItems = [
'One',
'Two',
'Three'
];
$scope.showOnCondition = true;
$scope.checkSetting = function() {
// When calling checkSettings(), I would like to access the value of someProperty here
return $scope.settings;
}
});
myApp.directive('setting', function() {
return {
restrict: 'E',
require: '^myCtrl',
// HOW DO I SOLVE THIS?
// $parent.$parent is bad.
template: '<input type="radio" ng-model="$parent.$parent.settings.someProperty" name="mySetting" value="{{item}}" />',
scope: {
settings: '=',
item: '='
}
};
});
鉴于上面的例子,我如何正确地构造指令和/或标记以访问控制器中的settings.someProperty?还是我需要做一些完全不同的事情?
澄清
我正在尝试做的事情似乎有些混乱。 someProperty 在指令中可用 - 工作正常。请注意,我正在尝试将值分配给控制器的 someProperty 属性,从 in 指令(使用 ng-model)
更新
我已将上面的代码修改为已知的工作代码,并添加了jsFiddle。
请注意,它有效,但它在模板中使用$parent.$parent。这是我需要了解如何解决的问题。
【问题讨论】:
-
看看这个example这是你想做的吗?
-
不,这是一个不包含嵌套隔离范围的简单示例。
-
首先,作用域不是孤立的,所以你可以在这里使用作用域继承。那么 controllerAs 方法在这种情况下总是有效的。
-
@dfsq - 子作用域/指令不与控制器“交谈”。至于“controllerAs”方法,谢谢,但我不知道这意味着什么!感谢您的帮助,但您说的是相当笼统的内容,我正在寻找一些具体的内容来帮助我解决这个问题。
标签: javascript angularjs