Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/416.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ng中的指令包括_Javascript_Angularjs_Templates_Angularjs Directive_Angularjs Ng Include - Fatal编程技术网

Javascript ng中的指令包括

Javascript ng中的指令包括,javascript,angularjs,templates,angularjs-directive,angularjs-ng-include,Javascript,Angularjs,Templates,Angularjs Directive,Angularjs Ng Include,我正在构建一个简单的angularjs应用程序,并尝试在不刷新页面的情况下实现登录 我在做什么 在初始化时,ng include加载/set/save。/set/save获得了登录Facebook的。因此,当单击该指令时,将打开一个窗口,当该窗口关闭时,它应更改ng include的src 问题 当在ng include内部使用该指令时(ng include src在init上有默认值),什么都不会发生(控制台中没有错误,只是什么都没有),但是当我将该指令放在ng include外部时,它工作正

我正在构建一个简单的angularjs应用程序,并尝试在不刷新页面的情况下实现登录

我在做什么

在初始化时,ng include加载/set/save。/set/save获得了登录Facebook的
。因此,当单击该指令时,将打开一个窗口,当该窗口关闭时,它应更改ng include的src

问题

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

HTML:

控制器:

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

You need to be logged in order to save the set.
<br />
<a fblogin>Login with Facebook</a>
您需要登录才能保存集合。

使用Facebook登录
这是一个正在工作的插件:

通过在作用域上使用原语值,您被咬到了。
  • 当您将
    fblogin
    置于
    ngInclude
    之外时,它位于控制器的相同范围内
  • ngInclude
    始终创建一个新的子作用域,以便其中的任何指令都位于子作用域上
从…起 作用域继承通常是直接的,您甚至不需要知道它正在发生。。。直到您尝试将双向数据绑定(即表单元素、ng模型)从子范围内绑定到父范围上定义的基元(例如数字、字符串、布尔值)

它不像大多数人期望的那样工作。发生的情况是,子作用域获得自己的属性,该属性隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情——这是JavaScript原型继承的工作方式

新的AngularJS开发人员通常没有意识到,ng repeat、ng switch、ng view和ng include都会创建新的子作用域,因此当涉及这些指令时,问题往往会出现

通过遵循always的“最佳实践”,原语的这个问题可以很容易地避免

您的情况是
scope.saveTemplate='/set/continue'
只需在子作用域上创建一个变量,该变量会隐藏父作用域(控制器)的
scope.saveTemplate

App.controller("SetCtrl", ["$scope", "SetHolder",
    function($scope, SetHolder) {
        $scope.saveTemplate = '/set/save';
        $scope.test = "loaded";
    }
]);
You need to be logged in order to save the set.
<br />
<a fblogin>Login with Facebook</a>