当前位置: 首页 > 面试题库 >

AngularJS指令不会在范围变量更改时更新

龚寂弦
2023-03-14
问题内容

我尝试编写一个小指令,以将其内容包装在另一个模板文件中。

这段代码:

<layout name="Default">My cool content</layout>

应该有以下输出:

<div class="layoutDefault">My cool content</div>

因为布局“默认”具有以下代码:

<div class="layoutDefault">{{content}}</div>

这里的指令代码:

app.directive('layout', function($http, $compile){
return {
    restrict: 'E',
    link: function(scope, element, attributes) {
        var layoutName = (angular.isDefined(attributes.name)) ? attributes.name : 'Default';
        $http.get(scope.constants.pathLayouts + layoutName + '.html')
            .success(function(layout){
                var regexp = /^([\s\S]*?){{content}}([\s\S]*)$/g;
                var result = regexp.exec(layout);

                var templateWithLayout = result[1] + element.html() + result[2];
                element.html($compile(templateWithLayout)(scope));
            });
    }
}

});

我的问题:

例如,当我在模板(在布局模板中或在布局标签内部)中使用范围变量时。{{whatever}}它只是最初工作。如果我更新whatever变量,则该指令不再更新。整个链接功能只会被触发一次。

我认为,AngularJS不知道,该指令使用范围变量,因此不会被更新。但是我不知道如何解决此问题。


问题答案:

您应该创建一个绑定范围变量并观察其变化:

return {
   restrict: 'E',
   scope: {
     name: '='
   },
   link: function(scope) {
     scope.$watch('name', function() {
        // all the code here...
     });
   }
};


 类似资料:
  • 问题内容: 我有两个控制器,一个封装在另一个中。现在,我知道子范围从父范围继承属性,但是有没有办法更新父范围变量?到目前为止,我还没有遇到任何明显的解决方案。 在我的情况下,我在表单中有一个日历控制器。我想从父范围(即表单)更新开始日期和结束日期,以便表单在提交时具有开始日期和结束日期。 问题答案: 您需要在父作用域中使用一个对象(不是原始对象),然后就可以直接从子作用域中更新它 上级: ctrl

  • 问题内容: 我试图给这个问题尽可能精确的标题。 我对AngularJS还是很陌生,但是在这个问题上我很固执。我试图制作一个jsfiddle来更好地说明我的问题,但是它依赖于太多单独的文件。而且a还没有在线上,所以请耐心等待。:) 因此,基本上,我有一个使用构建的应用程序,其外观如下: 我拿起并有一个参考的锚,它有效地打开; 为简化起见,我们假设后者仅包含(自定义)标签。 在指令的控制器函数内部,我

  • 问题内容: 我需要从指令内的回调中修改根范围属性。但是,该指令位于由switch指令创建的内部范围内。 HTML JavaScript 小提琴:http://jsfiddle.net/nJ7FQ/ 我的目标是能够在“选定区域”中显示“新值”。我该如何完成我想做的事情?我究竟做错了什么? 此外,我正在尝试制作一个组件。有没有办法做到这一点,但要隔离范围? 问题答案: 我更新了小提琴,基本上不得不去父

  • 问题内容: 尽管在ChildCtrl中实例化了一个“新”变量,我如何进行变量更改并将其轻松传播回ParentCtrl?加分点数最少,甚至没有$ on和$ watch(使其更易于实现) ParentCtrl ChildCtrl / ChildCtrl2 / ChildCtrl3 / ChildCtrl4 视图 我的ChildCtrl的区别就足够大了,我无法轻松抽象出主布局和ng-view,但是它们都

  • 问题内容: 我用来加载图像。值是从一些范围变量加载的,如下所示: 我的问题是,当我运行时,它会使属性为空,但不会在属性中反映出来。因此,我不断看到需要空占位符的图像。 我该如何处理? 问题答案: 这是ngSrc和ngHref指令的预期行为。这些指令仅支持识别新路径,但是当路径不可用时,这些指令将以静默方式退出(我在这里看到一个拉取请求。)。 因此,当图像变量不再可用时,可能的解决方法是将ngSho

  • 问题内容: 经过数小时令人沮丧的搜索,我觉得我需要在这里提交我的问题。如果此问题以前得到过解答,我事先表示歉意,但是到目前为止,我的搜索都没有帮助。所以这是我的问题: 我的JavaScript代码正在创建一个对象,该对象由AngularJS修改和监视。对于某些事件(例如加载对象的先前设置),我希望从范围之外更改该对象的属性。问题是输入不会改变… 这是我希望如何执行这些更改的示例: HTML代码: