Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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 使用子范围';父范围的s数据';s ng重复_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript 使用子范围';父范围的s数据';s ng重复

Javascript 使用子范围';父范围的s数据';s ng重复,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,新增更新2,见下文 首先,这是我正在使用的框架(需要修复)的起点: 随着特定语句位置的更改,剩下的就是将数据传输到outerController,此时Alvaro和Robert的解决方案都起作用 另外,我认为有些人建议不要使用$(“#copy”).html($(“#src”).html())。正如我在评论中部分描述的,我正在开发的实际应用程序由多个网页组成,每个网页都包含自己的outerController。每个innerController都位于各自独立的HTML文件中,通过include指令

新增更新2,见下文

首先,这是我正在使用的框架(需要修复)的起点:

随着特定语句位置的更改,剩下的就是将数据传输到
outerController
,此时Alvaro和Robert的解决方案都起作用

另外,我认为有些人建议不要使用
$(“#copy”).html($(“#src”).html())。正如我在评论中部分描述的,我正在开发的实际应用程序由多个网页组成,每个网页都包含自己的
outerController
。每个
innerController
都位于各自独立的HTML文件中,通过include指令添加到
src
中。
outerController
复制
src
的内部HTML,将其传递给第三方库,第三方库将其粘贴到
copy
并控制其视觉布局<代码>$(“#copy”).html($(“#src”).html())
实际上是第三方库实现的一部分,所以我不能更改它。因此,使用此语句是一项要求


当我回到家,有了PC键盘的便利,我会把上面的内容作为一个解决方案发布。同时,如果您有更好的解决方案,请随意推荐,谢谢

Angular中的作用域使用原型继承,因此子作用域可以访问父属性,但父作用域不能访问子控制器作用域属性

您可以使用服务共享数据或使用$emit向上发送事件(向上发送到根范围)

我为您创建了一个plnkr,向您展示如何使用emit(您可以找到它)


我认为你应该利用角度服务

声明服务 首先,您应该声明一个将数据“服务”到应用程序其余部分的服务。为了简单起见,我将只展示一个返回预定义数组的方法,但是您可以在这里从服务器获取数据

app.service('pokemonService', function () {
    return {
        getPokemon: function () {
            return [{
                  name: "Bulbasaur",
                  type: "Grass/Poison"
              }, {
                  name: "Charmander",
                  type: "Fire"
              }, {
                  name: "Squirtle",
                  type: "Water"
              }];
        }
    };
});
在控制器中使用服务 然后,您可以在任何控制器上使用该服务,将其作为任何其他预定义的角度服务注入:

app.controller('innerController', function($scope, pokemonService) {
    $scope.pokemon = pokemonService.getPokemon();
});

app.controller('outerController', function($scope, pokemonService) {
    $scope.outerPokemon = pokemonService.getPokemon();
});
在视图中显示数据 最后,您可以在所需模板的任何模板/部分中列出您的所有神奇宝贝:

<!doctype html>

<html ng-app="myApp">
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <script src="index.js"></script>

  <body>
    <div ng-controller="outerController">
      <div id="copy">
          <!-- Here you can also list the pokémon from your outerController, maybe this time in a list -->
          <ul>
              <li ng-repeat="poke in pokemonOuter">
                  {{ poke.name }} - <span class="type">{{ poke.type }}</span>
              </li>
          </ul>
      </div>
      <hr>
      <div id="src" ng-controller="innerController">
        <table>
          <th>Name</th>
          <th>Type</th>
          <tbody>
            <tr ng-repeat="poke in pokemon">
              <td>{{ poke.name }}</td>
              <td>{{ poke.type }}</td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </body>
</html>

  • {{poke.name}}-{{poke.type}

名称 类型 {{poke.name} {{poke.type}
收尾
正如您所看到的,根本没有必要弄乱DOM。如果您使用AngularJS,您应该以有角度的方式进行操作,直接使用DOM根本不是有角度的方式。相反,您应该将所有数据和业务逻辑放入服务中,然后在控制器中使用这些服务检索数据并将其传递给视图。

您愿意将数据阵列(在本例中是口袋妖怪阵列)移动到角度服务吗?通过这种方式,您可以从该服务从服务器检索数据,然后在您想要的任何控制器中访问数据。我认为这是最好的设计理念,如果你愿意的话,我可以发布一个答案。@AlvaroVazquez好吧,继续发布你的答案。该项目仍处于试验阶段,因此重点是尝试实现所需的功能。如果这是将要构建的框架的起点,那么您应该坚持这一点,不要将基本功能与jQuery混合使用。如果你知道jQuery解决问题的方法,那么几乎所有的方法都是有角度的。@thegreatjedi你有我的回答,希望它能帮助你:)我真的鼓励你好好利用MVC模式。事实上,使用AngularJS的主要原因是能够以一种相当简单的方式使用该模式;)@MarcusH您指的是我想将HTML从
src
复制到
copy
的部分吗?对不起,我从实际系统中简化了这一点。在实际系统中,
src
由外部控制器传递到第三方库(显然也使用angularJS),该库控制进入
copy
的内容的布局。库实际上将我们想要复制的内容的
id
作为参数,而不是
html()
(在库的实现内部)。我对这部分无能为力,这是我的组织想要增加的一项功能,所以我的任务是让它发挥作用。我确实试过了,但没有起作用。我想知道我是否做对了。看看我对这个问题的更新。你忘了在OuterController操作中注入pokemonService,你是对的!我编辑了我的问题。谢谢!
app.service('pokemonService', function () {
    return {
        getPokemon: function () {
            return [{
                  name: "Bulbasaur",
                  type: "Grass/Poison"
              }, {
                  name: "Charmander",
                  type: "Fire"
              }, {
                  name: "Squirtle",
                  type: "Water"
              }];
        }
    };
});
app.controller('innerController', function($scope, pokemonService) {
    $scope.pokemon = pokemonService.getPokemon();
});

app.controller('outerController', function($scope, pokemonService) {
    $scope.outerPokemon = pokemonService.getPokemon();
});
<!doctype html>

<html ng-app="myApp">
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.7/angular.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <script src="index.js"></script>

  <body>
    <div ng-controller="outerController">
      <div id="copy">
          <!-- Here you can also list the pokémon from your outerController, maybe this time in a list -->
          <ul>
              <li ng-repeat="poke in pokemonOuter">
                  {{ poke.name }} - <span class="type">{{ poke.type }}</span>
              </li>
          </ul>
      </div>
      <hr>
      <div id="src" ng-controller="innerController">
        <table>
          <th>Name</th>
          <th>Type</th>
          <tbody>
            <tr ng-repeat="poke in pokemon">
              <td>{{ poke.name }}</td>
              <td>{{ poke.type }}</td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </body>
</html>