Javascript 为angular指令指定一个模型名称以访问它';父对象中的范围
当我在HTML中使用指令时,我试图通过在其元素上使用model属性来访问该指令的独立范围。例如Javascript 为angular指令指定一个模型名称以访问它';父对象中的范围,javascript,angularjs,Javascript,Angularjs,当我在HTML中使用指令时,我试图通过在其元素上使用model属性来访问该指令的独立范围。例如 <div controller="parent"> <hello-world data-ng-model="hw"/> <input type="submit"/> </div> hello world的指令: app.directive('helloWorld', function() { return { link:
<div controller="parent">
<hello-world data-ng-model="hw"/>
<input type="submit"/>
</div>
hello world的指令:
app.directive('helloWorld', function() {
return {
link: function(scope, element, attrs){
scope.t = 'test';
},
replace: true,
restrict: 'E',
scope: {},
template: '<h5>Hello world {{t}}</h4>'
};
});
app.directive('helloWorld',function(){
返回{
链接:函数(范围、元素、属性){
scope.t='test';
},
替换:正确,
限制:'E',
作用域:{},
模板:“Hello world{{t}”
};
});
t在隔离范围中定义,因为它正确显示。但是,当我单击submit按钮时,会出现一个错误,因为hw未定义。(因为hello world作用域未分配给父级的'hw'作用域变量。如何将hw定义为hello world指令的作用域?我的用例是创建一个日期选择器,该选择器公开通过其作用域拾取的日期。如
<date-picker ng-model="date1"/>
<date-picker ng-model="date2"/>
在指令的范围内,我将确保定义了月份、年份等。然后在父控制器中,我可以使用
$scope.date1.month
和类似的方法来访问选择的日期。根据您的注释,您似乎需要使用ngModel创建自定义的可验证元素
根据,这可以通过手动使用ngModelController
完成。下面的页面应该包含您需要的所有相关信息(请参阅示例中的script.js
):
祝你好运
您可以发布您的问题的plnkr吗?事实上,
hw
首先在父控制器的作用域中未定义。您应该在访问它之前检查$scope.hw
是否已定义,或者给它一个默认值$scope.hw={t:'Hello world'};
@blint,我知道如何给作为对象的模型指定默认值,就像那样。但区别在于我想要默认值(以及一般的值)由hello world指令分配。听起来您需要为父控制器和指令之间的某些作用域值设置双向绑定,而不是使用ng模型。例如,或者我误解了什么?您的plunkr没有封装您提供的代码,所以。祝您好运。
:)是+0.5。不完全是这样,因为它不只是将内部范围分配给模型,如果这样的构造根本不存在,我也不会感到惊讶。我低估了模型的内在复杂性(或者可能高估了它的普遍性)。事实上,你不能仅仅通过你的指令发送你的ngModel。事实上,将ngmodel
添加到自定义元素将修饰您的指令,并将实例化一个单独的ngModelController
控制器。如果需要组合函数性,则必须进行一些自定义工作,以便使用实例化的ngModelController
。正如ExpertSystem所提到的,好运
是答案的一部分;)
<date-picker ng-model="date1"/>
<date-picker ng-model="date2"/>