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

ng-include内的指令

章乐逸
2023-03-14
问题内容

我正在构建一个简单的angularjs应用,并且试图实现无需页面刷新的登录。

我在做什么

初始化时,ng-include会加载/ set / save。/ set / save <a fblogin>Login with Facebook</a>中有。因此,当单击指令时,将打开一个窗口,并且当关闭窗口时,应更改ng-include的src。

问题

当指令在ng-include内部使用时(ng-include
src在init上具有默认值)时,什么都不会发生(控制台中没有错误,只有空),但是当我将指令放在ng-
include之外时,它可以正常工作(请参见下面的HTML代码)

HTML:

<div id="set-creator" ng-controller="SetCtrl">
    ........
    <div id="saveModal" class="reveal-modal" data-reveal>

        <a href fblogin>testCase</a>

                // ^this is working
                //but if the directive is inside ng-include, it's not working

        <ng-include src="saveTemplate"></ng-include>
        <a class="close-reveal-modal">&#215;</a>
    </div>
</div>

指示:

App.directive('fblogin', function() {
return {
    transclude: false,
    link: function(scope, element, attrs) {

        element.click(function() {
            var win = window.open("/auth/facebook", 'popUpWindow', 'centerscreen=true');
            var intervalID = setInterval(function() {
                if (win.closed) {

                    scope.saveTemplate = '/set/continue';
                    scope.$apply();


                    clearInterval(intervalID);
                }
            }, 100);
        });
    }
};
});

控制器:

App.controller("SetCtrl", ["$scope", "SetHolder",
    function($scope, SetHolder) {
        $scope.saveTemplate = '/set/save';
        $scope.test = "loaded";
    }
]);

和/ set / save

You need to be logged in order to save the set.
<br />
<a fblogin>Login with Facebook</a>

问题答案:

这是一个工作正常的插件:http
://plnkr.co/edit/ilVbkHVTQWBHAs5249BT?p=preview

您在示波器上使用原始值被咬了。

  • 当你把fblogin外面ngInclude这是在控制器的相同的范围。
  • ngInclude总是创建一个新的子范围,因此它里面的任何指令都是on a child scope

从[了解范围Wiki:](https://github.com/angular/angular.js/wiki/Understanding-

Scopes)

范围继承通常是简单明了的,并且您通常甚至不需要知道它的发生……直到您尝试将2-way数据绑定(例如,表单元素,ng-
model)绑定到基元(例如,数字,字符串,布尔值)从子作用域内部在父作用域上定义。

它不能像大多数人期望的那样工作。发生的情况是 子作用域获得了自己的属性,该属性隐藏/阴影了同名的父属性 。AngularJS并没有这样做-
这就是JavaScript原型继承的工作方式。

新的AngularJS开发人员通常不会意识到 ng-repeat,ng-switch,ng-view和ng-include都会创建新的子范围
,因此当涉及这些指令时,常常会出现问题。

通过遵循始终具有“’
”的“最佳实践”,可以很容易地避免使用基元出现此问题。在您的ng-
models中。

您遇到的情况是,scope.saveTemplate = '/set/continue';仅在子作用域上创建一个变量,该变量将成scope.saveTemplate为父作用域(控制器)的影子。



 类似资料:
  • 问题内容: 我想在内容更改时创建具有自定义行为的列表。我尝试为此创建一个指令,但是我对如何将ng-transclude与ng- repeat指令结合起来感到迷茫。有人可以让我走上正轨吗? HTML: Javascript: 我已经在这里工作了一部分 编辑: 条件: 该项目的模板必须在视图中定义,而不是在指令中定义,并且必须有权访问子作用域中的项目属性。理想情况下,我想像在ng-repeat指令中那

  • 在JSP规范2.1中,我找到了一个关于JSP include指令和JSP include标记的示例: 对于更复杂的包含集示例,请考虑以下四种使用四个JSP文件构建的情况:a.JSP、C.JSP、dir/B.JSP和dir/C.JSP: 我不太理解这一点,尤其是第一种和最后一种情况,为什么在第一种情况下C.jsp不能解析为C.jsp?为什么c.jsp在最后一种情况下没有解析为dir/c.jsp?

  • 本文向大家介绍AngularJS基础 ng-include 指令简单示例,包括了AngularJS基础 ng-include 指令简单示例的使用技巧和注意事项,需要的朋友参考一下 AngularJS ng-include 指令 AngularJS 实例 包含 HTML 文件: 运行结果: myFile.htm 文件标题 这个文本来自被包含的文件 myFile.htm! 定义和用法 ng-inclu

  • 本文向大家介绍AngularJS基础 ng-include 指令示例讲解,包括了AngularJS基础 ng-include 指令示例讲解的使用技巧和注意事项,需要的朋友参考一下 AngularJS ng-include 指令 AngularJS 实例 包含 HTML 文件: 运行结果:                myFile.htm 文件标题                这个文本来自被包含

  • 问题内容: 是否可以使ng-include指令与CDN一起使用? 在这种情况下: somewebsite.com的cdn子域通过DNS / CName映射到内容传递网络。 但是,在加载主网站somewebsite.com时,它不会呈现模板。我想在内部将其视为跨域调用。 是否有任何变通方法可以将Angular模板托管在第三方CDN上并与本地域一起使用? 问题答案: 是的,您是对的-问题出在跨域调用。

  • 问题内容: 如何在angularJS中有条件地执行ng-include? 例如,如果变量设置为,我只想包含一些内容。 问题答案: 如果您使用的是Angular v1.1.5或更高版本,则还可以使用ng- if : 如果您有任何旧版本: 使用ng-switch: 小提琴